簡體   English   中英

為什么順序很重要?

[英]why does order matters?

為什么當我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;
}

cin.clear(); cin.ignore(10,'\\n'); 清除流的錯誤標志以使其再次可讀,然后嘗試跳過最多 10 個字符到行尾。

cin.ignore(10,'\\n'); cin.clear(); 首先嘗試最多跳過 10 個字符到行尾(如果流處於錯誤狀態,這將失敗並且不執行任何操作),然后清除流的錯誤標志以使其再次可讀。 然后你繞過循環並再次嘗試讀取上次導致它失敗的格式錯誤的數據。

如果問題是,“為什么我不能使用ignore來丟棄處於錯誤狀態的流中的數據”,那么,呃,你就是不能。 流的設計使用方式是它們進入錯誤狀態並坐在那里什么也不做,直到你知道如何修復它(並clear()它們說你忽略了錯誤)或者放棄並退出.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM