gpt4 book ai didi

c++ - 使用 cin.clear() 之间的区别;

转载 作者:行者123 更新时间:2023-11-28 02:56:21 26 4
gpt4 key购买 nike

while(cin.fail()){

cout<<"Error: Your line is too long.\nPlease enter a shorter line: ";
cin.clear(cin.good());
cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
cin.getline(name, maxCh);
}

我正在使用 cin.clear(cin.good()); 清除错误标志

但是使用 cin.clear(); 也可以吗?如果我调用这个函数,那么 cin.good() 有什么用呢?

最佳答案

首先,我不确定 std::cin.clear( std::cin.good() )是甚至保证编译。 std::cin.good()返回 bool , std::cin.clear()需要 std::ios_base::iostate , 而我不是确保可以保证转换。(例如,std::ios_base::iostate 可以是 enum。)其次,即使它编译了,它也只是偶然地做了你想要的:因为你仅在 std::cin.fail() 时执行此代码是true , std::cin.good()将返回 false , 将转换为 0对于所有整数类型,和 std::ios_base::goodbit (这可能是你想要的)是定义为 0 .它也是函数的默认参数,所以指定它真的没有意义。 ( clear 可以用于设置位,但这样做的方式非常残酷;通常,当你想要的时候要设置错误,您将使用 setstate ,这不会重置任何存在错误。)

对于它的值(value):我从来没有发现它会是适当调用std::basic_ios<>::good() .

关于c++ - 使用 cin.clear() 之间的区别;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21887742/

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