如何终止一维未知大小整数数组的输入?现有代码无法停止输入
解决输入整数数组时无法通过EOF终止的问题
你的代码目前仅在输入0时会终止循环,但当你输入EOF(Linux/macOS下Ctrl+D,Windows下Ctrl+Z)时,std::cin >> val会读取失败,进入else分支后,你仅清除了错误状态并忽略单个字符,未判断是否因EOF导致失败,所以循环会持续执行无法终止。
修改方案
在错误处理分支中增加EOF判断,若触发EOF则直接跳出循环;同时优化错误输入的忽略逻辑,一次性跳过整行无效输入,避免频繁进入错误分支:
#include <iostream> #include <vector> #include <limits> // 用于std::numeric_limits int main() { std::vector<int> vec; int val; do { if (std::cin >> val) { if (val == 0) break; vec.push_back(val); } else { std::cin.clear(); // 检测到EOF则终止循环 if (std::cin.eof()) { break; } // 忽略当前行所有无效输入,直到换行符 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); } } while (true); // 可选:输出验证输入的数组 for (int num : vec) { std::cout << num << " "; } return 0; }
关键改动说明
std::cin.eof()判断:捕获EOF信号,触发时直接终止循环,解决无法退出的问题。- 优化
ignore逻辑:用std::numeric_limits<std::streamsize>::max()替代固定的1,一次性跳过整行非整数输入,避免重复处理单个字符的低效情况。
注:Windows下输入Ctrl+Z后需按下回车才会触发EOF,Linux/macOS下直接按Ctrl+D即可生效。
内容的提问来源于stack exchange,提问作者HCMUSer
相关产品推荐
相关产品推荐

