如何创建一个while循环,继续循环直到在C ++中“使用流”输入一个键为止?

时间:2019-12-26 17:32:00

标签: c++ stream

这背后的基本想法就是这样做...

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

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

1 个答案:

答案 0 :(得分:1)

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

通常有特定于系统的方法来禁用与终端的OS级交互。在POSIX系统上,典型的方法是使用tcgetattr()tcsetattr()启用圆锥模式,即在标准输入流上设置ICANON标志(请参见例如my answer to a similar question)。