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

如何解决C++中cin读取输入引发循环意外重复执行的问题

问题原因
  • cin >> choice 读取字符串时默认以空白字符(空格、换行符、制表符等)作为分隔符,每次只会读取到第一个空白符前的内容,剩余未读取的内容会保留在输入缓冲区中。
  • 输入hi hi并按下回车时,输入缓冲区内容为hi hi\n:
    1. 第一次循环读取到第一个hi,匹配条件输出Whats up?,缓冲区剩余 hi\n
    2. 第二次循环运行时,cin >> choice会自动跳过开头的空格,读取到第二个hi,再次匹配条件输出Whats up?,缓冲区剩余\n
    3. 第三次循环时缓冲区无有效输入内容,才会等待新的用户输入,因此出现两次重复输出的现象。
解决方法

如果需要每次读取用户输入的一整行内容作为判断依据,将读取逻辑替换为getline即可,修改后的代码参考:

while (true) {
        string choice;
        cout << ">>> ";
        // 读取整行输入,不会按空格分割内容
        getline(cin, choice);
        if (choice == "hi") {
                cout << "Whats up?" << endl;
        } else {
                cout << "error" << endl;
        }
}

修改后输入hi hi会被判定为完整字符串"hi hi",不符合匹配条件,直接输出error,不会出现重复执行的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:06:04