#include <iostream>
#include <string>
using namespace std;
int main()
{
// Declare a variable to store an integer
int InputNumber;
cout << "Enter an integer: ";
// store integer given user input
cin >> InputNumber;
// The same with text i.e. string data
cout << "Enter your name: ";
string InputName;
cin >> InputName;
cout << InputName << " entered " << InputNumber << endl;
return 0;
}
如果我为InputNumber输入一些字符串,上面的程序会产生错误的输出,那里发生了什么,我假设分配给Inputnumbe的内存被覆盖但是问题是什么?还给出了一个示例输出。
correct output
Enter an integer: 123
Enter your name: asdf
asdf entered 123
wrong output
Enter an integer: qwert
Enter your name: entered 0
答案 0 :(得分:8)
当您输入整数的字符串,但尝试将其读入整数变量时,输入流进入错误状态。在清除之前,错误状态是粘滞的。您可以通过检查输入操作是否成功,或检查good()
方法或检查rdstate()
方法上的位来测试错误状态。可以使用clear()
方法清除错误状态。
答案 1 :(得分:4)
令人震惊的是,“将字符串输入到数字”是不可能的,这导致C ++库设计者得出令人惊讶的结论,即可能需要尝试输入然后确定它是否成功。这是这样做的:
int x;
if (std::cin >> x)
sing_and_dance();
else
cry();
Google std::istream
,如果您想了解如何正确使用它。