字元輸入的無限循環問題
執行提供的程式碼時,如果輸入非整數位元符而不是輸入,則會發生無限循環一個數字。此行為是在正數驗證過程中出現的。
具體來說,問題在於檢查 num1 有效性的內部 while 迴圈。如果輸入字母字符,則 cin >>> num1 語句失敗,設定失敗位標誌。但是,cin 緩衝區未清除,導致錯誤地假設相同的無效輸入仍然存在。
修復問題
要解決此問題,需要額外的邏輯需要處理無效輸入並清除cin緩衝區:
do { while(!(cin >> num1)) { cout << "Incorrect input. Please try again.\n"; cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); } if(num1 < 0) cout << "The number you entered is negative. Please enter a positive number to continue.\n"; } while(num1 < 0);
在這個修改後的程式碼中,使用了一個外部do-while迴圈來不斷提示等待輸入,直到輸入有效的正整數。
輸入無效字元後,呼叫 cin.clear() 重設failbit 標誌。隨後,cin.ignore() 用於丟棄輸入緩衝區中的所有剩餘字符,包括無效字符以及可能跟隨的任何空格或換行符。 numeric_limits
透過這些調整,程式碼可確保僅處理有效的整數輸入,並在非以下情況下避免無限迴圈:輸入整數位符。
以上是在 C 中輸入整數時如何防止無限循環?的詳細內容。更多資訊請關注PHP中文網其他相關文章!