You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何终止一维未知大小整数数组的输入?现有代码无法停止输入

解决输入整数数组时无法通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:18:20