【发布时间】:2016-03-09 17:50:48
【问题描述】:
所有,我这里有一些我无法解释其行为的代码。它张贴在下面。我查看了Why does integer overflow cause errors with C++ iostreams?,但它并没有真正回答我的问题。
#include <iostream>
#include<stdio.h>
using namespace std;
int main()
{
int x;
scanf("%d", &x);
cout << "Value of x = " << x << endl;
cin >> x;
cout << "Failure Detected = " << cin.fail() << endl;
cout << "Value of x = " << x << endl;
return 0;
}
所以,我期望这段代码做的是读入一个整数,打印出该整数的值,读入另一个整数(到同一个变量中),然后打印出该整数。如果我输入 7 和 2,那么它会按预期工作。但是,如果我为第一个和第二个输入输入 2^31(整数溢出),那么第一个输出将显示“x 的值 = -2147483648”,第二个输出将显示“x 的值 = 2147483647”。 cin.fail() 也将返回 true。 cin 对输入做了什么?我认为如果 cin.fail() 为真,则 x 的值应该不受影响。如果不受影响,我希望 x 的值会正常溢出(就像 scanf 一样)。这里的cin是怎么回事?为什么将值限制为整数最大值?
提前致谢!
【问题讨论】:
-
请不要因为显而易见而投反对票;这实际上非常微妙。