gpt4 book ai didi

c++ - 为什么顺序很重要?

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

为什么当我输入 cin.clear() 然后输入 cin.ignore() 程序运行完美,例如:我输入 chars 并且程序没有错误。

但是当我先放置 cin.ignore() 然后放置 cin.clear() 时,程序不会停止发送错误信号。

这是如何工作的?

不应该删除输入并取消设置失败标志吗?

#include <iostream>

using namespace std;

class time
{
private:
int hours;


public:
void getime()
{
do
{
cout << "Enter hours: ";
cin >> hours;
if ( hours < 0 || hours > 23 || cin.fail() )
{
cin.clear();
cin.ignore(10,'\n');
cerr << "invalid time, minutes must be between 0 and 59 " << endl;


}
}while(hours<0 || hours>23);
}
};

int main()
{
time asd;
asd.getime();
return 0;
}

最佳答案

cin.clear(); cin.ignore(10,'\n'); 清除流的错误标志以使其再次可读,然后尝试最多跳过 10 个字符到行尾。

cin.ignore(10,'\n'); cin.clear(); 首先尝试跳过最多 10 个字符到行尾(如果流处于错误状态,它将失败并且什么也不做),然后它清除流的错误标志以使其再次可读。然后绕过循环并再次尝试读取导致上次失败的格式错误的数据。

如果问题是“为什么我不能使用 ignore 丢弃处于错误状态的流中的数据”,那么,呃,你就是做不到。流的设计使用方式是它们进入错误状态并坐在那里什么都不做,直到您知道如何修复它(并且 clear() 它们说您忽略了错误) 或者放弃并退出。

关于c++ - 为什么顺序很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12899559/

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