do/while schleife
-
habe mal eine frage zu folgender schleife:
string text; int size; do { size=0; cout<<"Bitte Text eingeben: "; getline(cin, text); size = text.size(); cout<<size<<endl; system("pause"); }while(size<1);
man soll hier einen text eingeben können.. die schleife soll solange wiederholt werden, bis mindestens 1 zeichen eingegeben wurde.. funktioniert nur nicht so richtig.. wenn ich z.b. "hallo" eingebe, ist size=5.. so wies sein soll.. wenn ich nichts eingebe ist size=0.. auch ok.. wenn ich aber nichts eingebe, die schleife dann von vorn anfängt, und ich dann z.b. "hallo" schreibe, sagt er wieder size=0.. und erst im nächsten durchlauf ist size=5..
ich hoffe das war einigermaßen verständlich erklärt.. vielleicht hat ja jemand einen tipp, was ich falsch gemacht habe..
-
mit dem borland compiler scheint das einwandfrei zu gehen.. ich benutze ms vc..
kann man da was machen, dass das auch mit ms funzt?
-
Hast ein bischen ungenau erklärt was die Schleife eigentlich machen soll aber naja, glaub ich habs jetzt verstanden
char string[20]; int size; do { cout<<"Bitte Text eingeben: "; gets(string); //Hiermit kannst du Strings einlesen, auch mit Leerzeichen size=strlen(string); //strlen(); ist eine Funktion die die Länge des Strins ermittelt, ohne NullZeichen. Gibt als Rückgabewert die Länge an. cout<<size<<endl; //Normale Ausgabe ;) }while(size>1);//Die Schleife wird solange ausgeführt bis size <=1.
-
@T0mmy
Warum schreibst du ihm die (schlechtere) C Lösung, wenn er schon im C++ Forum postet und auch std::string benutzt?Zum Problem, ich glaube du musst noch ein cin.clear() nach deinem getline(...) einbauen, damit die Daten die im Eingabepuffer sind gelöscht werden!
-
ich würde mal den STLfix installieren.
Dank an Hume
-
also die lösung von tommy haut hin.. danke schonmal dafür :)..
@kpc
könntest du mir das mit dem cin.clear() etwas genauer erklären?
-
Kann indirekt ja nix dafür. So hab ichs halt letztes Jahr in der Schule gelernt. Wir haben letztes Jahr mit C++ begonnen und zwar mit Borland 3.1
auf Konsolenebene 2002.
Mittlerweile sind wir umgestiegen auf DevCpp
Weis zwar nicht wieso es die schlechtere Lösung ist, ist eigentlich auch wurscht, hauptsache es funktioniertedit
Man kann auch mit fflush(stdin) , den Tastaturpuffer leeren.
Wobei ich mir nicht sicher bin, glaub das funktioniert nur in DevCpp.
-
Hab grade mit der Suchfunktion gefunden was ich gesucht habe:
cin.clear(); cin.ignore(cin.rdbuf()->inavail());
Das löscht alle Zeichen die sich möglicherweise noch im Eingabebuffer befinden, du kannst aber auch einfach nur den STLFix installieren, das sollte das Problem auch beheben!
-
Shade Of Mine schrieb:
ich würde mal den STLfix installieren.
Dank an Hume
big thx an dich Shade Of Mine..
-
T0mmy schrieb:
edit
Man kann auch mit fflush(stdin) , den Tastaturpuffer leeren.ne, kann man nicht
-
@Shade Of Mine: Kannst du mir bitte sagen was es dann sonst bezweckt. Dachte immer es lehrt den Tastaturpuffer
Wenn ich fflush(stdin); eingebe kommt es aber zu keinem Fehler.
-
-
@T0mmy
es sieht so aus, als könne dein Lehrer kein wirkliches C++ und le[e|h]rt euch eine Mischung aus (altem) C++ und C, was wirklich absolut unbraubar ist. Vergiss am besten alles (,wechsel die Schule) und lern C++ von Anfang an mit den richtigen Büchern/Tutorials (siehe Links über dem Forum)Weis zwar nicht wieso es die schlechtere Lösung ist, ist eigentlich auch wurscht, hauptsache es funktioniert
Nein, eben nicht. Spätestens wenn du dir auf http://www.de.ioccc.org/main.html mal die Codes angeguckt hast, wirst du das verstehen
(zB. http://ioccc.org/2001/cheong.c)
Dachte immer es lehrt den Tastaturpuffer Wenn ich fflush(stdin); eingebe kommt es aber zu keinem Fehler.
stdin ist ein Input-Stream und fflush darauf anzuwenden ist laut Standard "undefined behaviour", dass bedeutet so viel wie, dass dein Compiler machen kann was er will. Er kann einfach den Tastatur Buffer löschen oder deine Festplatte oder böse Briefe über dein Lehrer schreiben. "undefined behaviour" (auch UB genannt) gilt es zu vermeiden. Selbst wenn der Code auf deinem Compiler geht, wirst du leicht ein blaues wunder erleben, falls du einmal einen anderen Compiler benutzt (oder nur die nächste Version) oder einfach ein wenig Code in deinem Programm änderst.