2017-09-22 66 views
0

你好,我正在嘗試學習C++,我想給一個程序做一點練習。但是我在循環中使用cout時遇到了問題。當循環再次運行時,爲什麼不輸出「請再試一次」?

這是我試圖從中輸出文本的循環。當用戶輸入一個無效的號碼時,應該說「對不起再試!」

while (datecheck) 
{ 
    bool check(false); 
    if (check) 
     std::cout<<"Sorry try again!"<<std::endl; 
    std::cin>>c; 
    if (c >= 1) 
    { 
     if (b == 2 && c <= 28) 
      datecheck = false; 
     if (b == 2 && a % 4 == 0 && c <= 29) 
      datecheck = false; 
     if (b == 4 || b == 6 || b == 9 || b == 11 && c <= 30) 
      datecheck = false; 
     if (c <= 31) 
      datecheck = false; 
    } 
    check = true; 
} 

當輸出和我故意讓自己在循環它不輸出任何

Year: -20 
-20 
-20 
+3

在循環內部,通過局部變量的初始化設置您的標誌爲false。那麼如果它是真的,你輸出。你什麼時候期望產出? – Yunnosch

+0

移動行'布爾檢查(false);'出while循環。和'check = true;'應該是其他條件的一部分。 – MKR

+0

等待我很笨。我猜是什麼時候重新啓動循環並將該標誌聲明爲false。我的錯。多謝你們。 – amgtree

回答

0

您在迭代聲明一個全新的可變check。並且您每次都將該變量初始化爲false。所以在while循環之前移動該聲明。

更改此:

while (datecheck) 
{ 
    bool check(false); 
    ... 
    check = true; 
} 

這樣:

bool check(false); 
while (datecheck) 
{ 
    ... 
    check = true; 
} 
+0

我認爲它在循環結束時執行@MKR。 – gsamaras

+0

如果我運行一個類似的循環,每次都做同樣的事情,我是否必須重新聲明變量爲false? – amgtree

+2

好吧,我解決了代碼時遇到了這個問題。再次感謝!我還有一個關於 另一個代碼片段的問題。我應該問一個新問題,或者我應該問什麼? – amgtree

-1

的問題是與bool check(false);聲明。這將繼續在每次迭代開始時將值重新分配給false

一個簡單的修復可能是擺脫check變量的使用,只能使用datecheck

bool datecheck(true); 
while (true) 
{ 
    std::cin>>c; 
    if (c >= 1) 
    { 
     if (b == 2 && c <= 28) 
      datecheck = false; 
     if (b == 2 && a % 4 == 0 && c <= 29) 
      datecheck = false; 
     if (b == 4 || b == 6 || b == 9 || b == 11 && c <= 30) 
      datecheck = false; 
     if (c <= 31) 
      datecheck = false; 
    } 
    if (datecheck) 
    { 
     std::cout<<"Sorry try again!"<<std::endl; 
    } 
    else 
    { 
     break; 
    } 
} 
+0

@雲諾斯有效點! – MKR

+1

你想添加一個解釋到你的代碼專用答案嗎?創建StackOverflow是免費編碼服務的印象在這裏並不是很受歡迎。 – Yunnosch

相關問題