irgendwie ne endlosschleife
-
mir wurde gesagt das ich hierhin kommen soll mit meinem problem
um das hier nicht noch einmal zu schreiben verlinke ich!
http://www.c-plusplus.net/forum/viewtopic-var-t-is-249169.htmlgruß
Andreasedit: Und das ist der Text der Frage. Statt das nochmal zu tippen, gibt es Copy&Paste.
hi zusammen,
vor so ca. 4 wochen hab ich angefangen mit C!
erfahrung hab ich in php/javascript/mysql/html/xml also ne menge haltjetzt hab ich das problem in c das er mir bei falscher eingabe ne endlosschleife reinhaut und ich weis überhaupt nicht warum!
hier der code
programm: cout << "Bitte tragen Sie Ihre gr\x94\xE1\e ein: "; cin >> groesse; if(groesse < 1.39) { cout << "Falsche Eingabe! Bitte wiederholen!\n"; goto programm; }sagt mir bitte jemand was hier wohl falsch ist! oder wie kann ich die richtige eingabe prüfen?
EDIT
vielleicht sollte ich dazuschreiben wann die schleife aufgerufen wird
hier darf ich nur ne float zahl eintippen
wenn ich also 1.3 eintippe geht alles ganz normal von statten... wenn ich aber 1,3 eintippe haut er mit ne endlosschleifen rein.
-
Ich glaube dir nicht, dass du ne "Menge" Erfahrung mit anderen Sprachen hast, sonst würdest du niemals gotos in einem solchen Kontext benutzen (vor allem, da man bis auf PHP das andere kaum Sprachen nennen kann im Sinne von C++ programmierens. und du hast nicht im erst in PHP Gotos benutzt, oder?).
Was für ne IDE benutzt du? Und nimm mal nen Debugger und gehe da durch, wenn du deine 1,3 eingegeben hast.
Ferner ist ne 1,3 kein Float, sondern eine 1, dann eine Zeichenkette "," und dann eine 3.
Mein Tipp: Schreib das Ding erstmal vernünftig um und eigne dir nicht diesen grauenhaften Stil an
-
Seikilos schrieb:
dann eine Zeichenkette ","
Eher ein Zeichen(literal). :p
-
Der Trick ist, dass du prüfen musst ob cin >> groesse erfolgreich ist und aus einem Komman kann nun einmal keine Zahl gemacht werden, d.h. es schlägt fehl und groesse behält seinen alten Wert.
-
Zum Leeren des Eingabepuffers steht hier was: http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html
-
Sieh dir die Tipps an, die dir gegeben wurden. Bleibt aber noch anzumerken, dass rdbuf()->in_avail() auf vielen Systemen nicht richtig funktioniert (weiß jemand warum?), darum muss man etwas anders vorgehen, wenn man den Eingabepuffer leeren will:
#include <iostream> #include<climits> using namespace std; int main() { double groesse; do{ cout << "Bitte tragen Sie eine Zahl größer als 1.39 ein: "; while (!(cin >> groesse)) { cin.clear(); cin.ignore(INT_MAX,'\n'); cout << "Das war keine Zahl, versuchen Sie es nochmal: "; } } while (groesse < 1.39); cout << "Eingegebene Zahl ist :" << groesse << endl; }