cin wird übersprungen
-
Hallo.
Kann es sein, dass cin-Anweisungen in einemProgramm übersprungen werden können? Denn genau das macht mein Programm permanent.
int j=0; Anfang: // Marke (Anfang des Programms) int ccc=0, pos=-1; cout << "Input [" << in << "] : "; // Gibt Eingabenr. aus cin >> eingabe; // Prompt fuer Eingabe eingabe=eingabe+"?";Dieser Programmteil bittet um eine Eingabe und liest eine String-Eingabe ein. Anschließend kommt dann ein größerer Programmteil, der den String verarbeitet. Nach diesem Programmteil kommt dann die Anweisung goto Anfang, das heißt, anschließend wird wieder zur Eingabeaufforderung zurückgesprungen und es kann ein neuer String eingegeben werden.
Problematisch wird es nur aus irgendeinem Grund, wenn in dem einzugebenden String Leerzeichen enthalten sind. Dann wird der nachfolgende Programmteil genauso oft ausgeführt, wie Leerzeichen in dem string waren. Das heißt, bei 3 Leerzeichen läuft das Programm drei Mal durch und überspringt dabei auch drei mal die cin-Anweisung.
Woran kann das liegen? Man kann doch cin nicht einfach ein paar mal überspringen, ehe etwas neues eingebgeen wurde?

Grüße vom Infostudent.
-
Versuch mal ein
cin.get();vor dein
cin>>eingabe;zu setzen.
-
Da liegt ganz einfach daran, dass cin Leerzeichen als Trennzeichen interpretiert. Das heißt, wenn du einen Text mit Leerzeichen eingibst, wird das erste Wort vor dem Leerzeichen benutzt und der restliche Teil der Eingabe bleibt im Puffer von cin. Dadurch wird dann beim nächsten Mal die Eingabe übersprungen, da ja noch Teile im Puffer sind, die stattdessen verwendet werden.
Also musst du entweder vor dem cin den Puffer leeren, oder, was du wahrscheinlich eher möchtest den ganzen String auch mit Leerzeichen einlesen. Das geht mit
#include <iostream> #include <string> using namespace std; int main() { string Eingabe; getline(cin, Eingabe); return 0; }Felix :xmas2:
EDIT: Darüber, dass man normalerweise lieber Schleifen anstatt goto benutzt, möchte ich hier eigentlich gar nicht reden...

-
Danke, das mit getline hat funktioniert!

Grüße,
Infostudent.