gpt4 book ai didi

c++ - C++ 中的 cin.ignore() 和 cin.clear()

转载 作者:行者123 更新时间:2023-11-30 01:25:02 24 4
gpt4 key购买 nike

所以我理解了一段代码:

cin.ignore(80, '\n');

将清除最多 80 个字符的缓冲区,直到它按下回车键(Enter 键)并停止……对吗?

这里是问题...

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 来获取完整的行。这只会在流耗尽(文件末尾或字符串末尾)时失败。 然后您可以通过专用的解析逻辑继续处理每一行,并以最合适的方式处理错误。原始流上的错误标志过于粗糙,无法进行优雅的控制流设计。

关于c++ - C++ 中的 cin.ignore() 和 cin.clear(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com