cin.ignore() and cin.clear() in C++
cin.ignore() and cin.clear() in C++
,所以我知道一块代码:
cin.ignore(80, 'n');
将清除多达80个字符的缓冲区,直到它击中返回(输入键)并停止...对?
这是问题...
1)简单地使用没有参数的cin.ignore();
有什么不同?哪种情况更好地使用?
2)cin.clear();
说它清除了错误标志...这是什么意思?什么是错误标志,为什么要清除它们?
谢谢!
错误标志将在流对象上设置在流动对象上。一旦流陷入错误,直到重置错误状态为止。
这是一个简单的示例:
std::istringstream iss("ABC123");
int n;
iss >> n;
assert(!iss);
现在流中流了。但是,其中仍然有数据,可能值得重置并再次尝试:
iss.clear(); // note: this must come first!
std::string token;
iss >> token;
assert(iss);
而不是另一种提取,您也可以在clear()
之后致电iss.ignore()
,以防您知道要再次尝试之前必须忽略什么。
通常,我发现这种反复试验不是一个很好的方法。我将始终先在流上使用getline
来获得完整的行。只有在流耗尽时(文件结尾或字符串的末端)才会失败。然后,您可以通过专用解析逻辑继续处理每一行,并且可以以最合适的方式处理错误。原始流上的错误标志太粗糙了,无法进行优雅的控制流设计。
我可以回答您的第二个问题。当您尝试输入两个不同的段落时,CIN.CLEAR()函数很有用。例如:
std::vector<std::string> veca,vecb;
std::string x;
while(getline(std::cin,x))
veca.push_back(x);
cin.clear();
while(getline(std::cin,x))
vecb.push_back(x);
如果您不使用CIN.CLEAR()函数,则vecb
一无所获,因为CIN之前遇到了文件终止。希望这会有所帮助。
相关文章:
- C++中的cin.ignore()函数不适用于整个流
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- Problems with std::cin.fail()
- 由cin中的字符串中未捕获空白引起的分割错误
- 在C++中使用Cin,我如何在1行中输入
- 将 cin 限制为只有一个
- cin >> int 给定一个字符串将 int 赋值为 0
- istream std::cin如何修改自定义istream缓冲区
- C++ 将 CIN 值存储到任何类型的数组中
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- cin 的十进制输入验证?
- Turbo C++ cin() 不能与 gets() 一起使用
- 使用 cin 时接受小数点后的 2 位数字
- 在 std::getline 和 std::cin 期间卡在循环中
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- 为什么我的两个 cin 语句没有在程序结束时运行?
- C++ cin.ignore() 跳过循环
- CIN是逻辑1还是0?
- 如何运行多行 cin?
- 从 cin 读取不会返回整个输入字符串