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

Warum verursacht „cin' Endlosschleifen mit Typkonflikten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-26 09:25:09444Durchsuche

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

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

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!

Stellungnahme:
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