strings mit leerzeichen einlesen?
-
wie kann man per "cin" strings mit leerzeichen einlesen?
und kann man beim einlesen kontrollieren ob die eingabe vom richtigen typ war? z.B. dass bei int nicht n buchstabe eingegeben wird...
thx
-
schnell die topic editiert? Fehler wohl selbst gefunden... es lag an der Deklaration der Variablen buch innerhalb der Schleife...
-
getline(cin,string);
Devil
-
pixartist schrieb:
z.B. dass bei int nicht n buchstabe eingegeben wird...
thxJa du kannst das failbit von cin überprüfen:
int i; cin >> i; if(cin.fail()) cout "PANIK!!!";
-
T@W schrieb:
schnell die topic editiert? Fehler wohl selbst gefunden... es lag an der Deklaration der Variablen buch innerhalb der Schleife...
jop habs gemerkt
thx fürm die antworten!
edit:
getline(cin,newName);
funzt nur halb irgendwie! ich kann den fehler nur schwer beschreiben! kannste die benutzung nochmal genauer erläutern? danke!
die ganze funktion spinnt total rum gibts da nen bekannten bug?
-
hmmm cin.fail() hilft mir trotzdem nicht, denn wenn ich bei mir nen char oder string statt nen int eingebe, dann läuft mein programm immer wieder durch ohne anzuhalten!
void main() { int point; string newName; string newNumber; Telefonbuch buch; int toDelete; string toFind; while(true) { point = 0; cout<<"-----------------------------"<<endl; cout<<"Menue:"<<endl<<"1. Alle Nummern anzeigen | 2. Neuen Namen hinzufuegen"<<endl<<"3. Anzahl aller eintraege | 4. Eintrag loeschen"<<endl<<"5. Nummer suchen"<<endl; cout<<"-----------------------------"<<endl; cin.ignore(cin.rdbuf()->in_avail()); cin>>point; point = int(point); cin.ignore(cin.rdbuf()->in_avail()); switch(point) { case 1: buch.list(); break; case 2: cout<<"Namen eingeben:"<<endl; getline(cin,newName); cout<<"Nummer eingeben:"<<endl; getline(cin,newNumber); buch.neuerName(newName, newNumber); break; case 3: cout<<"Anzahl der Eintraege: "<<buch.anzahl()<<endl; break; case 4: cout<<"Bitte id des zu loeschenden Eintrags angeben!"<<endl; cin>>toDelete; //hier ist es: if(!cin.fail()) { if(toDelete>=0 && toDelete<=buch.anzahl()) { cout<<buch.showName(toDelete-1)<<" wurde geloescht!"<<endl; buch.loeschen(toDelete); } else { cout<<"Eintrag nicht gefunden"<<endl; } } else { //was hier rein damit das programm nicht verrückt spielt? } break; case 5: cout<<"Bitte Namen angeben:"<<endl; getline(cin,toFind); if(buch.hasName(toFind)) cout<<"Die Nummer von "<<toFind<<" ist "<<buch.findNummer(toFind)<<". Seine ID ist "<<buch.findIdByNummer(toFind)+1<<"."<<endl; else cout<<"Der Name wurde nicht gefunden!"<<endl; break; default: break; } } }
-
Hallo,
entweder break; (dann bricht die Schleife ganz ab) oder das hier:
cin.clear(); cin.ignore(cin.rdbuf()->in_avail()); cin.get();
Dann wird die Eingabe wiederholt...