Memahami Gelung Tak Terhingga dengan cin dan Ralat Jenis Angka
Dalam sesetengah senario pengaturcaraan, kita mungkin menghadapi gelagat gelung tak terhingga apabila menggunakan cin untuk memasukkan rentetan sambil menjangkakan nilai angka. Artikel ini menyelidiki isu ini dan menyediakan penyelesaian yang mungkin.
Penjelasan tentang Gelung Infinite
Gelung yang anda berikan:
while (1) { cin >> ul_x1 >> ul_x2; cout << "ul_x1 is " << ul_x1 << endl << "ul_x2 is " << ul_x2 << endl; }
akan tidak berkesudahan lelaran jika aksara dimasukkan bukannya nombor. Ini kerana apabila cin menemui input bukan angka, ia memasuki keadaan gagal dan berhenti menggesa untuk input selanjutnya. Akibatnya, gelung kekal tersekat tanpa membenarkan sebarang interaksi pengguna.
Mengesan Input Bukan Angka
Untuk mengelakkan isu ini, adalah penting untuk mengesan input bukan angka. Satu pendekatan mudah adalah untuk memeriksa sama ada cin berada dalam keadaan gagal. Berikut ialah contoh:
if (cin.fail()) { cout << "ERROR -- You did not enter an integer"; // Clear the fail state and discard bad input cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
Kod ini menyemak keadaan gagal, memaparkan mesej ralat dan mengosongkan keadaan gagal. Panggilan ke cin.ignore() membuang sebarang aksara yang tinggal dalam penimbal input yang mungkin menyebabkan ralat.
Pertimbangan Tambahan
Untuk keperluan pengesahan yang lebih kompleks, ia mungkin berfaedah untuk membaca input sebagai rentetan dahulu dan kemudian melakukan semakan tambahan untuk memastikan ia memenuhi format yang dijangkakan. Ini boleh memberikan fleksibiliti dan penyesuaian yang lebih besar dalam mengendalikan pengesahan input.
Atas ialah kandungan terperinci Mengapakah `cin` Menyebabkan Gelung Tak Terhingga Apabila Memasukkan Nilai Bukan Angka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!