Isu Gelung Infinite dengan Input Aksara
Apabila melaksanakan kod yang disediakan, gelung tak terhingga berlaku jika aksara bukan integer dimasukkan dan bukannya nombor. Tingkah laku ini timbul semasa proses pengesahan untuk nombor positif.
Secara khusus, isu ini terletak dalam gelung sementara dalam yang menyemak kesahihan num1. Jika aksara huruf dimasukkan, cin >> pernyataan num1 gagal, menetapkan bendera failbit. Walau bagaimanapun, penimbal cin tidak dikosongkan, membawa kepada andaian yang salah bahawa input tidak sah yang sama berterusan.
Membetulkan Isu
Untuk menangani isu ini, logik tambahan ialah diperlukan untuk mengendalikan input tidak sah dan mengosongkan penimbal 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);
Dalam kod yang diubah suai ini, gelung do-while luar digunakan untuk menggesa input secara berterusan sehingga integer positif yang sah dimasukkan.
Selepas aksara yang tidak sah dimasukkan, cin.clear() dipanggil untuk menetapkan semula bendera failbit. Selepas itu, cin.ignore() digunakan untuk membuang semua aksara yang tinggal daripada penimbal input, termasuk aksara tidak sah dan mana-mana aksara ruang putih atau baris baharu yang mungkin mengikuti. Argumen numeric_limits Dengan pelarasan ini, kod memastikan bahawa hanya input integer yang sah diproses dan gelung tak terhingga dielakkan apabila bukan- aksara integer dimasukkan. Atas ialah kandungan terperinci Bagaimana untuk Mencegah Gelung Infinite Apabila Mengambil Input Integer dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!