1
#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
4

2 回答 2

8

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

于 2013-05-20T08:14:05.023 回答
4

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

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

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

于 2013-05-20T08:15:08.840 回答