2013-03-11 166 views
-1

我有以下if語句以確保當天輸入有效。但是,如果有人輸入了無效日期兩次,它只會保留該值。在繼續之前如何確保日期有效?一個while循環?C++ while循環問題

cin>>date.day; 
    if((date.day>31) || (date.month<1)) 
     { 
      cout <<"Please input a valid day."<< endl; 
      date.day = 0; 
      cin>>date.day; 
     } 
+0

是的,我想簡單地改變'if'爲'while'會達到你想要的。 – Turix 2013-03-11 04:49:52

+0

這聽起來像個好主意。你試過了嗎?發生了什麼? – Johnsyweb 2013-03-11 05:22:03

回答

0

你所尋找的是一個while循環:

cin>>date.day; 
while((date.day>31) || (date.month<1)) 
{ 
    cout <<"Please input a valid day."<< endl; 
    date.day = 0; 
    cin>>date.day; 
} 
1

使用dowhile結構:

do { 
    cout <<"Please input a valid day."<< endl; 
    date.day = 0; 
    cin>>date.day; 
    if (cin.fail()) { 
    cin.clear(); 
    cin.ignore(1024, '\n'); 
    } 
} while(cin.fail() || date.day > 31 || date.day < 1); 
+3

請記住,如果有人輸入「Hi there!」之類的東西,那麼在這裏完全有可能會陷入無限循環。你可能想要讀一整行,然後試圖把它作爲一個int來處理......然後做你的檢查。您可能還想在操作後檢查流的可行性。如果'!cin'那麼發生了一些不好的事情,並且再次,你的循環將會一直持續下去。用getline讀取該行,然後使用boost的詞法轉換或字符串流進行解析。 – 2013-03-11 04:54:55

+0

@CrazyEddie,非常好的一點。 – perreal 2013-03-11 04:56:11

+0

@CrazyEddie是的,這是一個很好的觀點。我沒有學過詞彙演員,所以我現在不打算使用這種方法。還有其他解決方法嗎? – Patrick 2013-03-11 05:01:31