我有一个非常简单的程序:
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运行程序,使用完全相同的输入一切正常。
答案 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;
}