Warum?
-
Hallo,
folgender Code sei gegeben:
[cpp] struct Komplex { double re, im; }; struct Student { string name; int matrnr; }; struct Student S; cout<<"\n\n Waehlen Sie eine Version zu testen!!!"<<endl; cout<<"(1) Komplexe Zahlen\n" <<"(2) Studenten Daten\n" <<"(3) Das Feld\n"<<endl; int wahl; cin>>wahl; switch(wahl){//<Zwischenablage leer> case 1 : cout<<"Geben Sie die reele Zahlen von Z\n"; cin>>z.re; cout<<endl; cout<< "Geben Sie imaginaere Zahlen von Z\n"; cin>>z.im; cout<<endl; ausgeben(z);//<Zwischenablage leer> break; case 2: cout<<"Geben Sie die Name:\n" ; cin >> S.name; cout<<"Geben Sie die Matrikulnummer:\n"; cin>>S.matrnr; ausgeben(S); break; case 3: cout<<"Geben Sie die Laenge des Felds!! "<<endl; cin>>n; double* df=new double[n]; for (int i=0; i< n; i++) df[i]=i+1; if(n>1) ausgeben(df,n); else ausgeben(df); break; }; [/cpp]Mein Problem ist der zweite Fall. FOlgende Ausgabe erscheint:
Waehlen Sie eine Version zu testen!!!
(1) Komplexe Zahlen
(2) Studenten Daten
(3) Das Feld2
Geben Sie die Name:
Peter Pan
Geben Sie die Matrikulnummer:Peter
4199393
--------------------------------------------------------------------------Wenn ich den Namen eingegeben habe, überspringt er die Eingabe der
Matrikelnr. Warum?Gruß
Boris
-
Der Name darf kein Leerzeichen enthalten.
Wenn du das wilsst dann verwende getline()
Kurt
-
Weil du noch was im Eingabestream hast, ein \n von der Eingabe der Wahl, also pack zwischen cin>>wahl und das switch ein getchar(); rein.
Außerdem liest du den Namen besser mit getline(cin, S.name) ein. Wenn du mit cin>>S.name einliest, hört er beim ersten Leerzeichen auf.EDIT: Ächz, bin ich lahm heut

-
Ok, danke erstmal!
Aber müßte das Problem denn nicht eigentlich in jedem Case auftreten? Das wundert mich ein bischen.
-
Tritt nicht immer auf. Kommt auf die Kombination an.
In deinem Fall extrahierst du erst mal einen String das ist ok. Dann kommt wegen dem Leerzeichen wieder ein String du willst aber ein int -> cin geht auf Fehler. Dann kommt erst mal nichts mehr bis du cin.clear() aufrufst.
Probleme kanns auch noch geben wenn du z.b ein einzelnes Zeichen aus dem Stream holst, und danach einen String. Du gibst also ein Zeichen ein und dann Enter. Zuerst holst du ein Zeichen ( das Enter bleibt im Puffer ) wenn du dann einen String willst bekommst du einen leeren String zurück.
Kurt