Rumah > pembangunan bahagian belakang > C++ > Mengapakah `cin` Menyebabkan Gelung Tak Terhingga Apabila Memasukkan Nilai Bukan Angka?

Mengapakah `cin` Menyebabkan Gelung Tak Terhingga Apabila Memasukkan Nilai Bukan Angka?

DDD
Lepaskan: 2024-12-30 19:35:14
asal
231 orang telah melayarinya

Why Does `cin` Cause Infinite Loops When Inputting Non-Numeric Values?

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;
}
Salin selepas log masuk

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');
  }
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan