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

C++ Primer示例代码在Windows下无法按换行终止输入的问题咨询

解答你的C++输入困惑

首先明确说:这完全是预期行为,别担心不是你环境的问题,也不是你写错代码了。

为什么原来的代码会这样?

《C++ Primer》里那段读取未知数量输入的代码,核心逻辑是用while (cin >> num)循环读取整数对吧?这里的cin >> num会自动跳过所有空白字符——包括空格、制表符,还有你输入的换行符。对C++输入流来说,换行符和空格没区别,只是用来分隔整数的“分隔符”而已。所以你输入3 4 5 6再按回车,程序只会把这四个整数读进去,但因为输入流还没“结束”,它会继续等你输入更多内容。

只有两种情况会让这个循环停下来:

  • 输入了非整数类型的内容(比如你输入的f),这时候cin >> num会失败,循环终止;
  • 手动触发输入流结束(EOF):在Windows里按Ctrl+Z然后回车,在Linux/macOS里按Ctrl+D。

你之前学Python会觉得困惑很正常——Python的input()是按“行”读取的,回车就代表一行输入结束,但C++的标准输入默认是按“标记(token)”读取的,整数就是一个标记,空白符只是分隔标记的东西,不代表输入结束。

怎么让程序在输入换行后就终止?

如果你想要输入一行数字(比如3 4 5 6),按回车就直接求和终止,那可以换一种思路:先读取一整行输入,再从这行里解析出所有整数。具体代码如下:

#include <iostream>
#include <string>
#include <sstream> // 要包含这个头文件来使用istringstream

using namespace std;

int main() {
    int sum = 0;
    int num;
    string line;

    // 先读取一整行输入,直到遇到换行符
    getline(cin, line);

    // 把读取到的字符串转换成一个输入流,这样就能像用cin一样读取整数了
    istringstream iss(line);

    // 从这个字符串流里读取整数求和
    while (iss >> num) {
        sum += num;
    }

    cout << "Sum is: " << sum << endl;

    return 0;
}

代码解释:

  • getline(cin, line):一次性读取用户输入的一整行(包括空格,但不包括最后的换行符),存到line字符串里;
  • istringstream iss(line):把字符串line包装成一个“内存输入流”,这样我们就能用和cin一样的方式(iss >> num)从里面读取整数;
  • 之后的循环和原来的逻辑一样,只是从字符串流里读,读完这行里的所有整数后,循环就会终止,不用再输入其他内容。

这样修改后,你输入3 4 5 6然后按回车,程序就会直接输出Sum is: 18并结束,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:16:54