首页 > 解决方案 > 如何创建一个while循环,继续循环,直到在C++中“使用流”输入一个键?

问题描述

这背后的基本思想是这样做......

std::istringstream in{"",ios::ate};
while(in.empty()){
    //copy contents of 'cin' stream into the 'in'
}

我在 Bjarne 的书中读了一些关于流的内容(主要是关于如何使用它们),还阅读了一些关于 stackoverflow 的答案,关于复制流的内容,以及从 istream 对象到 istringstream 对象,但实际上并没有任何效果,还有一个问题是,如果我使用 getline(),它会等待输入,即使分隔符设置为“”,而我不希望它等待。*我尝试运行一个for循环,并检查在那段时间键盘是否敲击,进入cin,他们做到了,但仍然 getline(cin, str, ' ') 等待。对于标题中的主要问题,为什么 getline(cin,str,' ') 等待,即使 cin 有空格?

标签: c++stream

解决方案


“控制台”与 C++ 的交互主要是系统特定的,在 C++ 中没有任何抽象。在终端屏幕上键入内容时,操作系统通常会处理行编辑,并且仅在输入换行符时才将当前行传递给程序。

通常有系统特定的方法来禁用与终端的操作系统级交互。在 POSIX 系统上,典型的方法是使用tcgetattr()tcsetattr()启用圆锥模式,即ICANON在标准输入流上设置标志(例如,参见我对类似问题的回答)。


推荐阅读