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
Lepaskan: 2024-12-26 09:25:09
asal
407 orang telah melayarinya

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

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

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!

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