循环调用的 std::getline 不等待用户输入

问题描述 投票:0回答:1

很抱歉提出这样一个可能有重复的令人尴尬的简单问题,但我一直在努力通过大量的 StackOverflow 答案,但无法让 C++ 中的基本 I/O 工作。

我正在开发一个交互式程序,用户可以在其中输入行并接收行作为回报。可悲的是,它有时不等待用户输入,所以我尝试将我的代码简化为一个最小的可重现示例:

#include<iostream>

int main() {
    std::string line_cpp;

    while (1) {
        std::getline(std::cin, line_cpp);

        std::cout << "a" << std::endl;
    }
}

在我的系统(g++(Ubuntu 7.5.0-3ubuntu1~18.04),Gnome Terminal 3.28.1,zsh 5.4.2)上,当通过

g++ code.cpp -o code; ./code
编译和运行时,会发生这种情况:

  • 预期的行为是:它应该等待用户输入一行并按下 Enter 键,然后用
    a
    响应,然后再次等待用户
  • 如前所述,代码等待几秒钟,然后无限打印字母
    a
  • 当我按照建议
    here
    here
    std::cin.ignore();之前添加行std::getline时,同样的事情发生了
  • 当我按照建议
    here
    std::ws(std::cin);
    之前添加行std::getline时,它会打印出2个
    a
    ,然后等待用户输入,然后按Enter键后它会无限打印
    a

编辑:

line_cpp
是每次迭代的空字符串。

c++ iostream cin cout getline
1个回答
2
投票

出于某种原因,只需关闭我的终端并再次打开它就可以解决问题。我可能通过

cat
二进制文件或其他东西搞砸了终端。

© www.soinside.com 2019 - 2024. All rights reserved.