首頁 > 後端開發 > C++ > 為什麼字母輸入會導致我的 C 程式死循環?

為什麼字母輸入會導致我的 C 程式死循環?

DDD
發布: 2024-12-04 02:37:11
原創
386 人瀏覽過

Why Does Letter Input Cause an Infinite Loop in My C   Program?

C 程式接受字母作為整數輸入時出現無限循環問題

當程式需要整數輸入,但使用者輸入時,會出現此問題而是一封信。由於輸入流中存在意外字符,程式進入無限循環。這會導致連續顯示訊息「您輸入的數字為負數。請輸入正數以繼續。」沒有提供使用者輸入有效數字的機會。

說明

此問題的根本原因在於 C 輸入流的行為。當使用者輸入非數字字元時,輸入流的“failbit”標誌被設定。然而,流並沒有被清除,因此程式仍然停留在同一個循環迭代中,嘗試重複讀取無效字元。

解決方案

解決此問題,有必要實施適當的輸入驗證和錯誤處理。以下是如何解決此問題的範例:

#include <iostream>
#include <limits>

// ... (remaining code)

cout << "\nPlease enter a positive number and press Enter: \n";
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);
登入後複製

在此修改後的程式碼中:

  • while 循環已封裝在do-while 循環中,確保至少即使初始輸入無效,也會執行一次。
  • 在內循環內部,使用cin.fail() 實現正確的輸入驗證
  • 如果偵測到無效輸入,則會顯示錯誤訊息,並清除並忽略cin 緩衝區,以防止其影響後續輸入嘗試。
  • 然後提示使用者重新輸入-輸入有效的整數。
  • 此過程將繼續,直到使用者輸入一個正整數。

以上是為什麼字母輸入會導致我的 C 程式死循環?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板