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
DDDasal
2024-12-30 19:35:14245semak imbas

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;
}

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!

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