我的问题基于这个简单的代码:
#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(使用前将#替换为@)