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

Reading 500 inputs on one line via std::cin produces garbage

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

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

对于小输入,这按预期工作,但一旦 n > ~500,输入就会在我键入时变成倒置的问号。输入由空格分隔的事实似乎有所不同,因为如果我输入 250 个数字,点击 return,然后输入接下来的 250 个数字,它会按预期工作。

有人知道为什么会这样吗?

编辑:感谢您提供有关检查我的终端是否出现问题的建议;事实证明是这样。刚刚 运行宁 ./a.out < input.txt 而不是尝试通过 Xcode 运行 程序使用完全相同的输入使一切正常。

"... if I input 250 numbers, hit return, and then enter the next 250 numbers it works as expected. ..."

这样做听起来很容易出现简单的输入错误等错误。手动输入如此大量的数字很可能会因误入不需要的字符等而失败。

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

 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;
 }