2012-06-20 27 views
0

我在Youtube上通過Visual C++ Express和教程練習C++。我用一個很酷的視頻製作了一個計算器,但是我不希望程序在你做一個方程後立即結束,所以我搜索了做什麼和嘗試(真)。什麼是最可能發生的(while)真(true)?

問題是,而不是一個數字,當程序提示我輸入一個數字時,我輸入「blah」,敲回車,程序開始發瘋,所以我退出了真正的快速。

如果不輸入while(true),如果輸入「blah」,程序會立即進入「按任意按鈕退出...」的短語。所以我想知道的是,(真)有多危險? 另外,如果這個問題不合適,我真的很抱歉-_-

+9

沒有代碼,沒有答案。這個問題可能與「while(true)」完全無關。 –

+1

同意。而(真正的)真的不應該改變任何東西,除非它重複一遍又一遍地重複代碼;也許輸入的數據類型錯誤會導致您閱讀數據的方式出現問題。 –

+2

您必須驗證輸入,即對於計算器,您必須確保它是數字。除此之外,有時無限循環可能是有用的。 –

回答

3

while(true)顯然可以創建一個「無限」循環,這意味着在進程中沒有任何內部能夠導致循環終止。操作系統可能會決定(例如,在CPU使用配額用盡之後)或被詢問(例如UNIX/Linux上的kill -HUP processid)以終止該過程。

這是值得考慮含有無限循環之間的差:(?I/O)

  • 阻止請求,如等待新的網絡的客戶端的連接或數據或鍵盤輸入,或者甚至只是一個特定的時間間隔流逝,然後定期有限量或I/O相關的處理,和
  • 無阻塞支化和數據處理的指令,僅僅旋轉圍繞燃燒CPU和/或抖動CPU /存儲器高速緩存(例如x += array[random(array.size())];

在某些情況下,前一種情況實際上可能是故意使用的,例如不需要執行任何有序關閉的服務器進程,因此可以讓操作系統在不運行任何後循環代碼的情況下將其關閉,但第二種情況是通常是一個編程錯誤:當通過循環控制中斷循環的處理過程中出現退出條件或錯誤時,您往往只有這樣的一種方式while(true)。例如,可能有一個if (condition) break;,或者在發生錯誤時會拋出異常的東西。這可能並不明顯 - 例如,如果可能是被調用的某個函數的例外 - 甚至可以將標準iostream的函數設置爲轉換失敗或EOF - 而不是循環內源代碼中可見的語句。

值得一提的是,許多其他的事情可以創建無限循環太 - 例如while (a < b)可能永遠持續下去,如果沒有什麼條件下a可能成爲>= b。所以,編程的一般方面是你必須考慮你的循環如何退出,而不是語言安全性方面的問題。對於輸入,這是正常的做類似的:

while (std::cin >> my_int) 
{ 
    // can use my_int... 
} 

// failed to convert next input from stdin to an int and/or hit EOF 
4

while(true){}會發生的最糟糕的事情是您將進入一個無限循環。

如果你寫了一些東西到那些括號中,然後是一個打破循環的指令,那將會一遍又一遍地重複。

這回答你的問題。如果你想知道你的計算器有什麼問題,請創建一個具有特定問題的新問題。

+0

除非你括在括號裏有'break','throw','return','exit'或'terminate'。 –

+1

任何嘗試寫出詳盡的列表都將是困難的。在C++ 11中還有'std :: quick_exit',我不確定什麼'abort'調用完全在底層。 –

+0

而'longjmp'如果你喜歡混合你的C和C++。 – Rook

0

如果您編寫控制檯應用程序,則打算從控制檯內運行它。

不要whilecin.get()或其他任何東西,只是使用您的程序,因爲它的目的是使用。

+0

downvoting是好的。但請解釋原因。這是我的猜測:**這不回答問題**。也許我沒有回答這個問題,但我標記了潛在的問題。 – xtofl

相關問題