这背后的基本思想是这样做……
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,'')。标题中有一个主要问题,即使cin有空格,为什么getline(cin,str,'')也要等待?
“控制台”与C ++的交互主要是特定于系统的,在C ++中没有任何抽象。在终端屏幕上键入内容时,操作系统通常会进行行编辑,并且仅在输入换行符时才将当前行传递给程序。
[通常存在特定于系统的方法来禁用与终端的OS级交互。在POSIX系统上,典型的方法是使用tcgetattr()
和tcsetattr()
启用cononical mode,即在标准输入流上设置ICANON
标志(例如,参见my answer to a similar question)。