如何检查 stdin 中的数字是否小于给定类型的数字限制

How to check if number from stdin is less than the numeric limit of a given type?

本文关键字:数字 小于 类型 是否 何检查 检查 stdin      更新时间:2023-10-16

我收到了一个任务,该任务实际上并没有指定我的一个函数应该期望的输入范围(只是,它总是一个正整数(,并且输入是运行时决定的。我可以以某种方式测试我选择的类型是否真的可以容纳它被馈送到的值吗?

说明

我希望做什么:

char test;
std::cin >> test;
if(MAGIC)
{
    std::cout << "Error." << std::endl;
} 

神奇的部分(甚至是前面的行(是我正在寻找的测试。它应该像这样工作:

标准定: 100 -> 无输出

标准: 1000000 -> 错误。

对于大多数数据类型,您可以检查输入流的错误状态,如此处所述。但是,这不适用于其他一些类型,例如帖子中的char,因为std::cin >> test会将数据作为单个字符读取,即 '1'这不是您需要实现的目标。

一种方法是将数字读入std::string,并将其与通过极限获得的max()进行比较:

std::string max = std::to_string(std::numeric_limits<char>::max());
std::string s;
std::cin >> s;
bool cmp = (s.size() == max.size()) ? (s <= max) : (s.size() < max.size());
std::cout << s << " " << cmp << std::endl;

演示。

注意:上面的代码假设输入的数据是一个数字,该数字可以任意大,但不得包含数字以外的字符。如果无法做出此假设,请使用此问答中的解决方案来测试输入是否为数字。

我认为答案可能是 https://stackoverflow.com/a/1855465/7071399 知道在哪里获得限制,然后参考 https://stackoverflow.com/a/9574912/7071399 以获取代码的灵感(给定您可以使用长 int 或 char 数组来存储数字,然后检查它是否适合整数值(。