是否有可能从cin读取一个空字符串,仍然可以从cin.good()获得真实的?

Pet*_*ter 4 c++ cin

我的问题基于这个简单的代码:

#include <string>
using namespace std;

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

cin 的operator >>(它是basic_istream类型的对象)读取并丢弃任何前导空格(例如空格,换行符,制表符).然后operator >>读取字符,直到遇到下一个空白字符.运营商最终返回流本身,cin.
如果没有设置至少一个eost,eof,fail或bad,就不可能输入一个空字符串?因此,流与运算符bool转换为false.我认为!buf.empty()在这里是多余的,但这是一个好习惯.有没有办法让cin的iostate保持良好状态并将字符串留空?

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

谢谢

Col*_*mbo 5

不,这是不可能的.如果未std::ios::failbit设置任何字符,则设置.[string.io]/3:

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

如果可以提取字符,则随后将它们附加到字符上string,从而使其大小非零.