为什么订单很重要?

kor*_*rek 1 c++ ignore clear

那为什么当我把cin.clear()那么cin.ignore()程序完美的作品,例如:我把chars和程序没有错误.

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

这是如何运作的?

不应该删除输入和未fail flag设置?

#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;
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*sop 5

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

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

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