c++ 循环中调用的std::getline不等待用户输入[已关闭]

pw9qyyiw  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(163)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
6小时前关门了。
Improve this question
很抱歉问了这么一个令人尴尬的简单问题,可能有重复的,但我一直在争取我的方式通过大量的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- 3ubuntu 1 ~18.04),Gnome终端3.28.1,zsh 5.4.2)上,当通过g++ code.cpp -o code; ./code编译和运行时,会发生这种情况:

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

Edit:line_cpp在每次迭代时都是空字符串。

lb3vh1jj

lb3vh1jj1#

由于某种原因,只要关闭我的终端并再次打开它就解决了这个问题。程序的行为就像预期的那样。
也许发生的事情是,我搞砸了终端的cat吨一个二进制文件,其中包含控制代码,或其他事情发生。

相关问题