Rumah >pembangunan bahagian belakang >C++ >Mengapakah `cin` Menyebabkan Gelung Infinite dengan Jenis Tidak Padan?
Memahami Gelung Infinite dengan cin Apabila Jenis Tidak Padan
Apabila menggunakan fungsi cin untuk membaca input, gelung tak terhingga boleh berlaku jika input yang dijangkakan ialah angka tetapi aksara ditaip sebaliknya. Ini berlaku kerana cin gagal apabila ia menemui input bukan angka dan memasuki keadaan gagal, menghalangnya daripada menggesa input selanjutnya.
Punca Gelung Infinite
Dalam kod yang disediakan:
unsigned long ul_x1, ul_x2; while (1) { cin >> ul_x1 >> ul_x2; cout << "ux_x1 is " << ul_x1 << endl << "ul_x2 is " << ul_x2 << endl; }
Jika input tidak sah diberikan, cin gagal dan kekal dalam keadaan itu. Akibatnya, gelung tidak pernah memasuki blok di mana cin membaca input sekali lagi, menyebabkan gelung tak terhingga.
Mencegah Gelung Infinite
Untuk mengelakkan masalah ini, seseorang boleh mengesahkan input menggunakan keadaan gagal cin:
if (cin.fail()) { cout << "ERROR -- You did not enter an integer"; // Clear fail state and discard bad input cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
Alternatif: Berasaskan Rentetan Pengesahan
Untuk pengesahan yang lebih kompleks, adalah berfaedah untuk membaca input sebagai rentetan sebelum melakukan semakan berasaskan rentetan tertentu untuk memastikan ia memenuhi format yang dijangkakan.
Atas ialah kandungan terperinci Mengapakah `cin` Menyebabkan Gelung Infinite dengan Jenis Tidak Padan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!