Heim > Backend-Entwicklung > C++ > Warum verursacht „cin' Endlosschleifen mit Typkonflikten?

Warum verursacht „cin' Endlosschleifen mit Typkonflikten?

Mary-Kate Olsen
Freigeben: 2024-12-26 09:25:09
Original
407 Leute haben es durchsucht

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

Endlosschleifen mit cin verstehen, wenn der Typ nicht übereinstimmt

Bei Verwendung der cin-Funktion zum Lesen von Eingaben kann es zu einer Endlosschleife kommen, wenn die erwartete Eingabe vorliegt ist numerisch, aber stattdessen werden Zeichen eingegeben. Dies geschieht, weil cin fehlschlägt, wenn es auf eine nicht numerische Eingabe stößt und in den Fehlerzustand wechselt, wodurch verhindert wird, dass weitere Eingaben angefordert werden.

Ursachen einer Endlosschleife

In der bereitgestellter Code:

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;
}
Nach dem Login kopieren

Wenn eine ungültige Eingabe erfolgt, schlägt cin fehl und bleibt in diesem Zustand. Dadurch gelangt die Schleife nie wieder in den Block, in dem cin die Eingabe liest, was zu einer Endlosschleife führt.

Endlosschleifen verhindern

Um dieses Problem zu vermeiden, kann man validieren Eingabe mit dem Fehlerstatus von 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');
}
Nach dem Login kopieren

Alternative: Stringbasiert Validierung

Für eine komplexere Validierung kann es hilfreich sein, die Eingabe als Zeichenfolge zu lesen, bevor bestimmte stringbasierte Prüfungen durchgeführt werden, um sicherzustellen, dass sie dem erwarteten Format entspricht.

Das obige ist der detaillierte Inhalt vonWarum verursacht „cin' Endlosschleifen mit Typkonflikten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage