Rumah > pembangunan bahagian belakang > C++ > Mengapa Surat Menyebabkan Gelung Infiniti dalam Program Input Nombor C?

Mengapa Surat Menyebabkan Gelung Infiniti dalam Program Input Nombor C?

Patricia Arquette
Lepaskan: 2024-12-02 21:20:11
asal
429 orang telah melayarinya

Why Do Letters Cause Infinite Loops in C   Number Input Programs?

Memahami Gelung Tak Terhingga Apabila Memasukkan Huruf Daripada Nombor

Apabila melaksanakan atur cara yang menggesa input integer, adalah perkara biasa untuk menghadapi gelung tak terhingga jika pengguna memasukkan huruf dan bukannya nombor. Isu ini timbul disebabkan oleh cara pengendalian input berfungsi dalam C .

Punca Punca:

Dalam C , fungsi cin digunakan untuk membaca input. Walau bagaimanapun, jika aksara bukan angka dimasukkan, cin gagal mengeluarkan integer yang sah. Akibatnya, bendera failbit ditetapkan dalam objek aliran cin, menunjukkan ralat.

Membetulkan Gelung Infinite:

Untuk menyelesaikan gelung tak terhingga, kita perlu untuk mengesan dan mengendalikan senario input yang tidak sah. Berikut ialah bahagian kod yang diubah suai yang membetulkan isu ini:

#include <limits> // Includes numeric_limits for input validation

// (...) Existing code

// user enters a number
cout << "\nPlease enter a positive number and press Enter: \n";
do {
    while (!(cin >> num1)) {
        cout << "Incorrect input. Please try again.\n";

        // Clear the failbit and ignore the remaining input
        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);
Salin selepas log masuk

Penjelasan:

  • sementara (!(cin >> num1)) menyemak sama ada cin berjaya membaca integer. Jika tidak, ia memasuki gelung do-while dalaman untuk mengendalikan ralat.
  • cin.clear(); menetapkan semula bendera failbit, membenarkan cin membaca input sekali lagi.
  • cin.ignore(numeric_limits::max(), 'n'); membaca dan membuang semua aksara sehingga aksara baris baharu ditemui. Ini memastikan bahawa sebarang input tidak sah dimasukkan sebelum baris baharu dibuang.
  • Dengan pembetulan ini, program kini akan menggelung hanya apabila integer positif yang sah dimasukkan, menghalang gelung tak terhingga disebabkan oleh input tidak sah.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan