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

为什么C++程序在第一个输入循环后无法接收第二个输入?

问题原因

第一个输入循环终止时,std::cin 的错误标识位(failbit/eofbit)已经被置位:

  • 若通过输入EOF(Windows系统按Ctrl+Z,Linux/macOS系统按Ctrl+D)结束第一组输入,会触发eofbit
  • 若输入了非double类型的非法字符结束第一组输入,会触发failbit
    错误位未被手动清除时,后续所有对std::cin的输入操作都会直接返回失败,因此第二个循环不会等待输入,直接跳过执行。
解决方法

在两次输入的间隙,先清除std::cin的错误状态,再清空输入缓冲区中残留的无效数据即可:

  1. 调用cin.clear()清除所有错误标识位,让cin恢复可输入状态
  2. 调用cin.ignore()清空缓冲区残留的无效字符,避免残留的非法字符直接触发下一次输入失败。如果要清空整个缓冲区直到换行符,可以传入参数:cin.ignore(numeric_limits<streamsize>::max(), '\n'),使用该参数需要引入<limits>头文件。
修正后代码
#include <iostream>
#include <vector>
#include <limits> // 引入numeric_limits所需头文件

using namespace std;

int main()
{
    vector<double> v1;
    for(double temp1; cin >> temp1;) {
        v1.push_back(temp1);
    }
    cout << "input1" << endl;

    // 清除错误状态+清空缓冲区
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(), '\n');

    vector<double> v2;
    for (double temp2; cin >> temp2;) {
        v2.push_back(temp2);
    }
    cout << "input2" << endl;

    return 0;
}

内容的提问来源于stack exchange,提问作者MegaNoob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:42:02