是否可以从 cin 读取空字符串,并且仍然可以从 cin.good() 中获取 true



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

#include <string>
using namespace std;
int main() {
    string buf;
    while (cin >> buf && !buf.empty()) {
        cout << "input is " << buf << "n";
    }
    return 0;
}

cin 的运算符>>(它是类型 basic_istream 的对象(读取并丢弃任何前导空格(例如空格、换行符、制表符(。然后运算符>>读取字符,直到遇到下一个空格字符。操作员最终返回流本身,cin。
应该不可能输入一个空字符串而不设置至少一个 iostates eof、失败或错误?因此,流与运算符布尔值一起转换为假。我认为!buf.empty((在这里是多余的,但是一个好习惯。有没有办法让 cin 的碘状态保持良好并将字符串留空?

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

谢谢

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

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

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

最新更新