2015-07-03 53 views
0
 int H; 
     int M; 
     int SleepH; 
     int SleepM; 

     cout << NumActivities[2][0]; 
     cin >> H >> M; 

     cout << NumActivities[2][1]; 
     cin >> SleepH >> SleepM; 

     int SubtractM; 
     int SubtractH; 

     if (H<=12) 
     { 
      int MH=24; 
      int MM=60; 

      SubtractH= MH-H; 

      SubtractM = MM-M; 
     } 

      if (SleepM==00) 

      { 
       int SleepM= SleepM+60; 

       int TimeLeftH; 
       TimeLeftH= SleepH-SubtractH; 

       int TimeLeftM; 
       TimeLeftM= SleepM-SubtractM; 

       int F; 
       F=TimeLeftM/60; 

       int DoThisZ; 
       DoThisZ= TimeLeftH + F; 

       float Normal = Normal + DoThisZ; 
       cout<<Normal; 



      } 

      } 

     } 

以上是我的程序。它沒有完成,但是當運行時,程序在第64行輸出NumActivities [2] [1]後不斷提前結束。我找不到任何方法來阻止它,並且取消循環並不會改變任何內容。程序在C++早期結束

我希望程序讓我輸入變量H,M,SleepH和SleepM,然後顯示結果,但是在顯示NumActivities [2] [1]之後不讓我輸入變量就會關閉。

+2

學習如何使用調試器並逐步完成代碼的好時機。 –

+0

它看起來應該試圖讀取兩個整數,然後沒有更多可觀察到的行爲。如果任何先前的輸入失敗,那些不等待輸入但立即失敗。你給了什麼輸入? – molbdnilo

+0

爲什麼你會浪費迭代#0,1,2,4,5?如果你只是檢查#3,不要使用'for'語句,而是使用'if'語句。 –

回答

1

當程序問你「你的睡前時間是什麼?」(24小時格式):「,如果你的回答包含冒號(:),它需要輸入你的下一個問題 - 」你睡了多久?:「以及。

這是因爲在C++中,逗號分隔符不是數字的一部分,因爲小數點不是整數,所以只要操作找到逗號或點,提取操作就會結束,字符作爲下一個被提取。隨後的提取操作會將該字符作爲第一個提取的字符,所以它們都會返回。

請輸入您的第一個答案,如「11 30」 - 數字之間的空格,而不是冒號。然後,程序也應該爲您的下一個問題提供輸入。

只是給一個建議,你正在浪費你的迭代數字0,1,2,4,5。所以,你可以簡單地拿走for循環。

+0

謝謝,這對我有效。 –