这背后的基本想法就是这样做...
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,'')也要等待?
答案 0 :(得分:1)
“控制台”与C ++的交互大部分是系统特定的,在C ++中没有任何抽象。在终端屏幕上键入内容时,操作系统通常会进行行编辑,并且仅在输入换行符后才将当前行传递给程序。
通常有特定于系统的方法来禁用与终端的OS级交互。在POSIX系统上,典型的方法是使用tcgetattr()
和tcsetattr()
启用圆锥模式,即在标准输入流上设置ICANON
标志(请参见例如my answer to a similar question)。