为什么cin失败,当我输入如下数字时:1 3999999999但它适用于较小的数字,如:1 5?
int main()
{
int N, X;
cout << sizeof(int);
cout << "Please enter two numbers: ";
cin >> N >> X;
vector <int> numbers = vector<int>();
int currentNumber;
cout << "Please enter list of numbers: ";
for ( int i = 0; i < N; i++ )
{
cin >> currentNumber;
if (cin.fail())
cout << "Something sucks!";
numbers.push_back(currentNumber);
}
sort(numbers.begin(), numbers.end(), Compare(X));
cout << "The list is now: " << endl;
for (int i = 0; i < N; i++)
{
cout << numbers[i] << " ";
}
cout << endl;
return 0;
}
它只是跳过了这一步。
答案 0 :(得分:4)
尝试:
std::cout << std::numeric_limits<int>::max() << std::endl; // requires you to #include <limits>
您系统上的 int
可能是32位带符号的二进制补码数,这意味着它可以表示的最大值为2,147,483,647。您的号码3,999,999,999大于此号码,int
无法正确表示。 cin
失败,提醒您这个问题。
long
可能是您系统上的64位整数,如果是,请尝试。您需要一个64位整数来表示3,999,999,999。或者,您可以使用unsigned int
,它将能够表示大到4,294,967,295的数字(同样,在典型系统上)。当然,这意味着你不能代表负数,所以这是一种权衡。
答案 1 :(得分:0)
这可能是因为大值太大而无法适应系统中int
类型的变量。尝试将大值赋给变量,看看会发生什么。
要解决此问题,请将变量类型更改为更宽的类型,例如long
或long long
。
答案 2 :(得分:0)
int
可表示的最大数量取决于它所代表的位数。通常,它是32位,即。最大数量为2147483647
,小于您输入的数字。
答案 3 :(得分:0)
当格式化的输入函数以某种形式失败时,它们会设置std::ios_base::failbit
并保持参数中的原始值不变。有不同的故障和溢出被认为是一种失败。我记得有关不同错误的讨论以不同的方式表达,但我不记得结果。最好的办法是确保在调用任何输入功能之前清除errno
并检查errno
ERANGE
以区分溢出和格式错误。