2013-08-25 21 views
0

我正在嘗試倒計時器,出於某種原因,它似乎沒有執行(小時> = 1) 正確的語句 - 如果我註釋掉定時器沒有運行,看不出爲什麼 - C++

--Hour; 
Minute = Minute +60; 

該程序運行良好從60倒計時,然後遞減一分鐘,並重新開始在60秒每次......有人可以向我解釋爲什麼小時遞減不想工作?即時通訊新的C++和一般編程,所以如果你可以保持它儘可能簡單 謝謝。 代碼如下片段:

while (Hour >= 1) 
{ 
    while (Minute >= 1) 
    { 
     while (Second >= 1) 
     { 
      Sleep(1000); 
      --Second; 
      cout << Hour << " hours, " << Minute << " minutes, " << Second << " seconds;\n"; 
     } 

     Second = Second + 60; 
     --Minute; 
    } 

    Minute = Minute + 60; 
    --Hour; 
} 
+0

你的意思是寫'小時> = 0'和'Minute'一樣嗎? –

+1

問:在進入外循環之前,您是在初始化小時,分鐘和秒之前做了什麼? – paulsm4

+0

Dietmar kuhl是正確的,當我將小時和分鐘更改爲> = 0時,它將程序完全排序,但有人可以向我解釋爲什麼/如何,因爲我仍然有點困惑> _ < – user2714567

回答

0

首先,讓你的代碼更一致,我建議移動--Second;給你打印出當前時間之後,改變所有的攀比Time >= 0

int main(void) 
{ 
    int Hour = 1; 
    int Minute = -1; 
    int Second = -1; 

    while (Hour >= 0) 
    { 
    while (Minute >= 0) 
    { 
     while (Second >= 0) 
     { 
     Sleep(1000); 
     cout << Hour << " hours, " 
      << Minute << " minutes, " 
      << Second << " seconds;" << endl; 
     --Second; 
     } 

     Second += 60; 
     --Minute; 
    } 

    Minute += 60; 
    --Hour; 
    } 

    return 0; 
} 

現在,當你運行你的程序,只要Second == -1,這意味着沒有剩餘在當前分鐘多秒。當Minute == -1你在這個小時內沒有更多的時間了,而當你的時間已經完全消失時。

在C++中,在每次運行開始時評估循環。上面的代碼以分鐘爲單位遞增,然後以秒爲單位遞增,然後顯示遞增小時數之前的時間。

如果你有最初初始化爲0的分鐘和秒,下面的代碼將起類似於上面的代碼的作用(可能不那麼有用)。

while (Hour > 0) 
{ 
    Minute += 60; 
    --Hour; 

    while (Minute > 0) 
    { 
    Second += 60; 
    --Minute; 

    while (Second > 0) 
    { 
     --Second; 
     //sleep(1); 
     cout << Hour << " hours, " 
      << Minute << " minutes, " 
      << Second << " seconds;" << endl; 
    } 
    } 
} 

這段代碼會在顯示時間之前將小時,分鐘和秒數遞增。第二個例子的一個優點是Hour,MinuteSecond總是正數,所以你可以用unsigned int替換它們的定義。

編輯:正如BenVoigt指出的那樣,上面的第二段代碼將愉快地寫出大於60的分鐘和秒(可能不是你想要的)。

希望這些例子有所幫助。

附加說明:在C++中,您可以使用Minute += 60;而不是Minute = Minute + 60;。這只是簡寫。

+2

您的「另一種方式」會很開心輸出分鐘和秒的值大於60. –

+0

@BenVoigt爲我提供了一個不編譯它的權利。 – ilent2

相關問題