我的问题基于这个简单的代码:
#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)
谢谢
不,这是不可能的.如果未std::ios::failbit设置任何字符,则设置.[string.io]/3:
如果函数没有提取任何字符,则会调用
is.setstate(ios::failbit),这可能会抛出ios_base::failure.
如果可以提取字符,则随后将它们附加到字符上string,从而使其大小非零.