Rumah >pembangunan bahagian belakang >C++ >Mengapa Program C Saya Memasuki Gelung Infinite dengan Input Bukan Numerik?

Mengapa Program C Saya Memasuki Gelung Infinite dengan Input Bukan Numerik?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-10 10:18:11181semak imbas

Why Does My C   Program Enter an Infinite Loop with Non-Numeric Input?

Mengapa Program Bergelung Tanpa Kesudahan Apabila Memasukkan Huruf Daripada Nombor?

Apabila cuba memasukkan integer positif dalam program C tetapi sebaliknya memasukkan huruf secara tidak sengaja, gelung tak terhingga mungkin berlaku. Tingkah laku ini berpunca daripada cara aliran input cin memproses aksara.

Apabila input tidak betul (cth., huruf dan bukannya nombor), strim cin menetapkan bendera failbit dan meninggalkan input yang salah dalam penimbal. Percubaan seterusnya untuk membaca integer menggunakan cin akan terus mengembalikan input yang salah, mengakibatkan gelung yang tidak berkesudahan.

Untuk menyelesaikan isu ini, adalah penting untuk mengendalikan input yang salah dengan betul dengan menyemak ralat dan mengosongkan penimbal input. Berikut ialah versi kod yang diubah suai yang termasuk pengendalian ralat:

#include <iostream>
#include <limits>

int main()
{
    // Define variables
    int num1, num2, total;
    char answer1;

    do
    {
        // User enters a number
        cout << "\nPlease enter a positive number and press Enter: ";
        while (!(cin >> num1))
        {
            cout << "Incorrect input. Please try again." << endl;
            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." << endl;
    } while (num1 < 0);

    // Rest of the code goes here

    return 0;
}

Dalam kod yang dikemas kini ini, gelung sementara (!(cin >> num1)) berjalan sehingga integer yang sah dimasukkan. Apabila input yang salah dikesan, mesej ralat dipaparkan dan penimbal input dikosongkan menggunakan cin.clear() dan cin.ignore(). Ini memastikan program boleh meneruskan membaca input dengan betul selepas mengendalikan ralat.

Atas ialah kandungan terperinci Mengapa Program C Saya Memasuki Gelung Infinite dengan Input Bukan Numerik?. 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