爲什麼當我把cin.clear()
然後cin.ignore()
該程序完美地工作,例如:我把chars
和程序不會bug。爲什麼訂單很重要?
但是當我把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;
}
考慮將問題改寫爲「爲什麼」cout <<「hello world」; return;'works以及爲什麼返回; cout <<「hello world」;'不是? – 2012-10-15 16:07:46
ouch,即時新聞,請溫柔哈哈。 – korek
@korek cin.clear()不會對緩衝區執行任何操作。它只是重置標誌。因此,它可能不會做你認爲它做的事情。 –