通过std :: cin在一行上读取500个输入会产生垃圾

时间:2015-08-12 00:17:34

标签: c++ c++11 cin

我有一个非常简单的程序:

int n;
int arr[1000];
cin >> n;
for (int i = 0; i < n; i++) {
    cin >> arr[i];
}

这对小输入有效,但是只要n>当我输入时,输入变成500左右的问号。似乎输入被空格分隔的事实有所不同,因为如果我输入250个数字,点击返回,然后输入接下来的250个数字,它按预期工作。

任何人都知道为什么会这样吗?

编辑:感谢您检查我的终端是否被堵塞的建议;事实证明它是。刚刚运行./a.out < input.txt 而不是尝试通过Xcode运行程序,使用完全相同的输入一切正常。

1 个答案:

答案 0 :(得分:4)

  

“...如果我输入250个数字,点击返回,然后输入接下来的250个数字,它按预期工作。...

这样做听起来很容易因输入中的简单拼写错误而容易出错。手动输入大量数字很可能会因误入歧视的角色而失败。

您应该检查输入的实际结果

 while(!(cin >> arr[i])) {
     cin.clear();
     std::string dummy;
     cin >> dummy;
     cerr << "Invalid input: '" << dummy << "'." << endl;
 }

或者只是在遇到错误时停止处理:

if(!(cin >> arr[i])) {
     cin.clear();
     std::string dummy;
     cin >> dummy;
     cerr << "Invalid input: '" << dummy << "'." << endl;
     break;
 }