是否有可能从 cin 读取一个空字符串,并且仍然从 cin.good() 得到 true ?

2023-12-09

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

#include <string>
using namespace std;

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

    return 0;
}

The 运算符>> ofcin(basic_istream 类型的对象)读取并丢弃任何前导空格(例如空格、换行符、制表符)。然后操作员>>读取字符直到遇到下一个空白字符。运算符最终返回流本身 cin。
如果不至少设置 iostates eof、fail 或 bad 之一,就不可能输入空字符串?因此流转换为布尔运算符为假。我认为!buf.empty()在这里是多余的,但却是一个好习惯。有没有办法把cin的iostate留在里面good并将字符串留空?

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

谢谢


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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否有可能从 cin 读取一个空字符串,并且仍然从 cin.good() 得到 true ? 的相关文章

随机推荐