我的问题基于这个简单的代码:
#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
,从而使其大小不为零。