将字符串输入到int会在c / c ++中产生错误的输出

时间:2013-05-20 08:11:48

标签: c++ cout cin

#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

2 个答案:

答案 0 :(得分:8)

当您输入整数的字符串,但尝试将其读入整数变量时,输入流进入错误状态。在清除之前,错误状态是粘滞的。您可以通过检查输入操作是否成功,或检查good()方法或检查rdstate()方法上的位来测试错误状态。可以使用clear()方法清除错误状态。

答案 1 :(得分:4)

令人震惊的是,“将字符串输入到数字”是不可能的,这导致C ++库设计者得出令人惊讶的结论,即可能需要尝试输入然后确定它是否成功。这是这样做的:

int x;
if (std::cin >> x)
    sing_and_dance();
else
    cry();

Google std::istream,如果您想了解如何正确使用它。