Ich lerne C++ und schreibe kleine Programme, während ich mitfahre. Im Folgenden ist ein solches Programm:Endlosschleife in C++
// This program is intended to take any integer and convert to the
// corresponding signed char.
#include <iostream>
int main()
{
signed char sch = 0;
int n = 0;
while(true){
std::cin >> n;
sch = n;
std::cout << n << " --> " << sch << std::endl;
}
}
Als ich dieses Programm ausführen und halten Eingänge relativ klein absolute Werte, verhält es sich wie erwartet. Wenn jedoch größere Eingaben eingegeben werden, z. B. 10000000000, spuckt das Programm wiederholt die gleiche Ausgabe aus. Einige Kombinationen von Eingaben verursachen unberechenbares Verhalten. Zum Beispiel:
#: ./int2ch
10
10 -->
10000000000
10 -->
10 -->
10 -->
10 -->
Das Programm spuckt "10 ->", bis es getötet. (Bei dieser speziellen Sequenz von Eingängen ändert sich die Ausgabe des Programms sprunghaft.) Ich habe auch bemerkt, dass die Ausgabe großer Werte durch die vorherige legale Eingabe sowie den Wert der aktuellen illegalen Eingabe bestimmt wird.
Was ist los? (Ich kümmere mich nicht darum, das Programm zu reparieren, das ist einfach. Ich will es verstehen.)
Alternativ rufen Sie std :: cin.clear() auf, um den Fehlerzustand vor dem nächsten Durchlauf der Schleife zu entfernen. – hark