cin>>int //was tun bei einem Buchstaben?
-
Stelfer schrieb:
flush(stdin)
Lieber nicht: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39349.html
oder mit while(getchar!='\n')
Jap, aber:
void ignore() { int c; while ( (c = getchar()) != '\n' && c != EOF ); }
-
Danke euch, funktioniert wunderbar
-
hab jetzt auch genauso ein Problem wie du Sabjosu..Ich will prüfen, ob eine Zahl oder ein Buchstabe eingegeben wurde...
aber i komm nicht weiter!
Wie hast du es letztendlich gemacht? kannst du deinen Code vll mal posten?Meiner sieht so aus...
cout <<endl<<"Bitte geben Sie die Kraft F ein [in N]:"; while(1) { if(cin >> f) {break;} else { cout<<"Bitte nur Zahlen eingeben."<<endl; cin.clear(); } }
aber leider läuft der Text " Bitte nur Zahlen eingeben" in einer Endlosschleife..was muss ich einfügen und wo, damit das problem behoben ist ?
Danke im voraus!
-
Du musst den Eingabepuffer noch leeren, das geht so:
cin.ignore( numeric_limits< streamsize >::max(), '\n' );
-
-.-
wurde doch bei den lösungsvorschlägen
-
while (1==1) //<-- mir ist grad nichts besseres eingefallen
{
einsatz = 0;
if( cin >> einsatz)
{
refresh();
cout<<endl;
break;
}
else
{
cin.clear(); // Buffer leeren?
cin.ignore(cin.rdbuf()->in_avail()); // Buffer leeren?
cout<<"Bitte nur Zahlen eingeben."<<endl;
}fflush(stdin);
getchar();
}
-
Tro1aner schrieb:
while (1==1) //<-- mir ist grad nichts besseres eingefallen
{
einsatz = 0;
if( cin >> einsatz)
{
refresh();
cout<<endl;
break;
}
else
{
cin.clear(); // Buffer leeren?
cin.ignore(cin.rdbuf()->in_avail()); // Buffer leeren?
cout<<"Bitte nur Zahlen eingeben."<<endl;
}fflush(stdin);
getchar();
}
Der Schleifenkopf ist sinnlos, da kannst du gleich while(1) schreiben, zum anderen kannst du den rückgabewert von cin abfangen und mit dem arbeiten,
dein fflush(stdin) ist kein standard und macht dir probleme beim porten auf andere rechner, der befehl wird nur akzeptiert bei windows os, dein flush kann man sich auch ersparen weil du den buffer weiter oben leerst.
mfg
stelfer
-
while (1==1) //<-- mir ist grad nichts besseres eingefallen :P
lol. Naja, ist ja auch nicht so wichtig ...
-
Ich wollte noch anmerken, dass man sich das ganze auch einfacher machen kann. Man liest mit getline(cin,string blup) einfach einen String ein und checkt dann anstatt mit if(blup==1) mit if(blup=="1") und schon hat man das Problem mit den Buchstaben anstatt int Werten umgangen und brauch sich nicht die Mühe machen mit dem Buffer leeren.
-
Für einen Vergleich mit ein paar festen Werten mag das ja noch gehen (obwohl selbst da der int-Vergleich schneller sein wird als ein string-Vergleich), aber wenn du mit der Eingabe rechnen willst, verschiebst du dir die Unterscheidung nur auf später (bei der Umwandlung der Eingabe in einen int-Wert).