Rumah >pembangunan bahagian belakang >C++ >Mengapakah `cin` Menyebabkan Gelung Infinite dengan Jenis Tidak Padan?

Mengapakah `cin` Menyebabkan Gelung Infinite dengan Jenis Tidak Padan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-26 09:25:09395semak imbas

Why Does `cin` Cause Infinite Loops with Type Mismatches?

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!

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