我有以下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;
}
我有以下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;
}
你所尋找的是一個while
循環:
cin>>date.day;
while((date.day>31) || (date.month<1))
{
cout <<"Please input a valid day."<< endl;
date.day = 0;
cin>>date.day;
}
使用do
while
結構:
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);
請記住,如果有人輸入「Hi there!」之類的東西,那麼在這裏完全有可能會陷入無限循環。你可能想要讀一整行,然後試圖把它作爲一個int來處理......然後做你的檢查。您可能還想在操作後檢查流的可行性。如果'!cin'那麼發生了一些不好的事情,並且再次,你的循環將會一直持續下去。用getline讀取該行,然後使用boost的詞法轉換或字符串流進行解析。 – 2013-03-11 04:54:55
@CrazyEddie,非常好的一點。 – perreal 2013-03-11 04:56:11
@CrazyEddie是的,這是一個很好的觀點。我沒有學過詞彙演員,所以我現在不打算使用這種方法。還有其他解決方法嗎? – Patrick 2013-03-11 05:01:31
是的,我想簡單地改變'if'爲'while'會達到你想要的。 – Turix 2013-03-11 04:49:52
這聽起來像個好主意。你試過了嗎?發生了什麼? – Johnsyweb 2013-03-11 05:22:03