C++ 是否可以从cin中读取空字符串,但仍然从cin.good()中获得true?

C++ 是否可以从cin中读取空字符串,但仍然从cin.good()中获得true?,c++,cin,C++,Cin,我的问题基于以下简单代码: #include <string> using namespace std; int main() { string buf; while (cin >> buf && !buf.empty()) { cout << "input is " << buf << "\n"; } return 0; } #包括 使用名称空间std; int m

我的问题基于以下简单代码:

#include <string>
using namespace std;

int main() {
    string buf;
    while (cin >> buf && !buf.empty()) {
        cout << "input is " << buf << "\n";
    }

    return 0;
}
#包括
使用名称空间std;
int main(){
字符串buf;
while(cin>>buf&&!buf.empty()){
cout>读取字符,直到遇到下一个空白字符。运算符最终返回流本身,cin。
如果不设置至少一个iostates eof(失败或错误),输入空字符串是不可能的,因此流会使用运算符bool转换为false。我认为!buf.empty()在这里是多余的,但这是一个好习惯。有没有办法使cin的iostate保持良好状态并使字符串为空

用法示例:
1.键入您选择的单词
2.按enter键
3.按Ctrl+d(UNIX上为EOF)或Ctrl+d(Windows上为EOF)


谢谢

不可能。如果无法提取字符,则设置了
std::ios::failbit
。[string.io]/3:

如果函数不提取任何字符,则调用
是.setstate(ios::failbit)
,它可能会抛出
ios_base::failure


如果可以提取字符,它们随后会附加到
字符串中,从而使其大小非零。

我很确定您的
!buf.empty()
连接是虚假的。谢谢!简要说明:只要只输入了空格,该函数就会一直运行。