我正在尝试使用 cin
读取 unsigned int
,如下所示:
#include <limits.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
unsigned int number;
// UINT_MAX = 4294967295
cout << "Please enter a number between 0 and " << UINT_MAX << ":" << endl;
cin >> number;
// Check if the number is a valid unsigned integer
if ((number < 0) || ((unsigned int)number > UINT_MAX))
{
cout << "Invalid number." << endl;
return -1;
}
return 0;
}
但是,每当我输入一个大于无符号整数上限(UINT_MAX
)的值时,程序就会显示3435973836
。如何检查用户给出的输入是否介于 0
到 UINT_MAX
之间?
最佳答案
两件事:
检查无符号整数是否为 < 0 或 > UINT_MAX 毫无意义,因为它永远无法达到该值!您的编译器可能已经发出警告,例如“由于类型范围有限,比较总是错误的”。
我能想到的唯一解决方案是在字符串中捕获输入,然后使用老式的 strtoul() 设置 errno 以防溢出。
即:
#include <stdlib.h>
unsigned long number;
std::string numbuf;
cin >> numbuf;
number = strtoul(numbuf.c_str(), 0, 10);
if (ULONG_MAX == number && ERANGE == errno)
{
std::cerr << "Number too big!" << std::endl;
}
注意:strtoul返回一个unsigned long;没有函数 strtou(),返回一个无符号整数。
关于c++ - 使用 'unsigned int' 读取 'cin',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9574771/