Heim > Backend-Entwicklung > C++ > Warum verursacht „cin' Endlosschleifen bei der Eingabe nicht numerischer Werte?

Warum verursacht „cin' Endlosschleifen bei der Eingabe nicht numerischer Werte?

DDD
Freigeben: 2024-12-30 19:35:14
Original
245 Leute haben es durchsucht

Why Does `cin` Cause Infinite Loops When Inputting Non-Numeric Values?

Endlosschleifen mit cin und numerischen Typfehlern verstehen

In einigen Programmierszenarien kann es zu Endlosschleifenverhalten kommen, wenn cin zur Eingabe von Zeichenfolgen verwendet wird während numerische Werte erwartet werden. Dieser Artikel befasst sich mit diesem Problem und bietet mögliche Lösungen.

Erklärung der Endlosschleife

Die von Ihnen bereitgestellte Schleife:

while (1)
{
  cin >> ul_x1 >> ul_x2;
  cout << "ul_x1 is " << ul_x1 << endl << "ul_x2 is " << ul_x2 << endl;
}
Nach dem Login kopieren

wird endlos iterieren, wenn Zeichen anstelle von Zahlen eingegeben werden. Dies liegt daran, dass cin, wenn es auf eine nicht numerische Eingabe stößt, in den Fehlerzustand wechselt und keine weiteren Eingabeaufforderungen mehr anfordert. Folglich bleibt die Schleife hängen, ohne dass eine Benutzerinteraktion möglich ist.

Erkennung nicht numerischer Eingaben

Um dieses Problem zu vermeiden, ist es wichtig, nicht numerische Eingaben zu erkennen. Ein einfacher Ansatz besteht darin, zu überprüfen, ob sich cin im Fehlerzustand befindet. Hier ist ein Beispiel:

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

Dieser Code prüft den Fehlerstatus, zeigt eine Fehlermeldung an und löscht den Fehlerstatus. Der Aufruf von cin.ignore() verwirft alle verbleibenden Zeichen im Eingabepuffer, die möglicherweise den Fehler verursacht haben.

Zusätzliche Überlegungen

Für komplexere Validierungsanforderungen gilt: Es kann von Vorteil sein, die Eingabe zunächst als Zeichenfolge zu lesen und dann zusätzliche Prüfungen durchzuführen, um sicherzustellen, dass sie dem erwarteten Format entspricht. Dies kann eine größere Flexibilität und Anpassung bei der Handhabung der Eingabevalidierung ermöglichen.

Das obige ist der detaillierte Inhalt vonWarum verursacht „cin' Endlosschleifen bei der Eingabe nicht numerischer Werte?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage