Rumah >pembangunan bahagian belakang >C++ >Mengapa Input Surat Menyebabkan Gelung Infinite dalam Program C Saya?

Mengapa Input Surat Menyebabkan Gelung Infinite dalam Program C Saya?

DDD
DDDasal
2024-12-04 02:37:11344semak imbas

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

Isu Gelung Tak Terhingga dalam Program C Menerima Surat sebagai Input Integer

Isu ini timbul apabila atur cara menjangkakan input integer, tetapi pengguna masuk sepucuk surat sebaliknya. Program ini memasuki gelung tak terhingga disebabkan oleh watak yang tidak dijangka dalam aliran input. Ini menghasilkan paparan berterusan mesej "Nombor yang anda masukkan adalah negatif. Sila masukkan nombor positif untuk meneruskan." tanpa memberi pengguna peluang untuk memasukkan nombor yang sah.

Penjelasan

Sebab asas isu ini terletak pada gelagat aliran input C. Apabila pengguna memasukkan aksara bukan angka, bendera "failbit" aliran input ditetapkan. Walau bagaimanapun, strim tidak dikosongkan, jadi program kekal tersekat dalam lelaran gelung yang sama, cuba membaca aksara tidak sah berulang kali.

Penyelesaian

Untuk menyelesaikan masalah ini , adalah perlu untuk melaksanakan pengesahan input yang betul dan pengendalian ralat. Berikut ialah contoh cara menangani isu ini:

#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);

Dalam kod yang diubah suai ini:

  • Gelung while telah dikapsulkan dalam gelung do-while, memastikan sekurang-kurangnya satu pelaksanaan walaupun input awal tidak sah.
  • Di dalam gelung dalam, pengesahan input yang betul dilaksanakan menggunakan fungsi cin.fail().
  • Jika input tidak sah dikesan, mesej ralat dipaparkan dan penimbal cin dikosongkan dan diabaikan untuk mengelakkannya daripada menjejaskan percubaan input berikutnya.
  • Pengguna kemudian digesa untuk memasukkan semula integer yang sah.
  • Proses ini berterusan sehingga pengguna memasukkan nilai positif integer.

Atas ialah kandungan terperinci Mengapa Input Surat Menyebabkan Gelung Infinite dalam Program C Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn