User soll nur Zahlen eingeben dürfen
-
sieht super damit aus

nur ein problem nachdem ichs gerade getestet habe: bei nachkommastellen nimmt er den ersten wert vor dem punkt un den danach streicht er. an und für sich wunderbar, allerdings sagt er danach wieder fehlerhafte eingabe wenn ich das nochmal aufrufe, jmd. eine idee??edit: nicht nur bei nachkommastellen, sondern immer wenn nach der zahl eine ungültiges zeichen kommt.
edit2: wie kann ich den eingabepuffer komplett leeren??
-
Versuch mal:
std::cin.ignore( std::cin.rdbuf( )->in_avail( ) );greetz, Swordfish
-
ich gehe von aus das die stellen der zahl nicht bekannt sind oder `?
-
nein die stellen sind nicht bekannt, aber es war so wie ich es mir dachte: nachdem ich z.B. 1234sdf eingegeben habe, wird sdf zwar ignoriert, bleibt aber trotzdem im eingabepuffer. deshalb wollte ich wissen wie ich den leere.
Danke klappt jetzt wunderbar.@Swordfish: deine Lösung (also mit read_number ()) hatte auch geklappt, sogar noch besser allerdings bin ich irgendwie unfähig strings in ints umzuwandeln...
-
Guckst Du:
C/C++ Forum :: FAQ - C++ :: Einmal Zahl nach String und zurückgreetz, Swordfish
-
hab schon weill alles nicht

deshalb mein ich ja, ich bin zu blöd dafür aber ich mach mich nochmal ran jetzt
-
Brusko schrieb:
ich gehe von aus das die stellen der zahl nicht bekannt sind oder `?
davon kann man i.d.R. ausgehen, es sei denn man kann hellseherprogramme schreiben

*fg*Fake oder Echt schrieb:
bin ich irgendwie unfähig strings in ints umzuwandeln...
dafür gibts doch atoi. guckst du bei <-dadda:

#include <limits.h> char input[64]; int i=0; while ( isdigit(input[i++] = getche()) ) { if ( strtod( input, NULL ) > INT_MAX ) { puts("touch too much!"); return 1; } } if ( input[--i] != 13 ) puts("\npfui !!!"); else printf("input: %d\n", atoi(input)); // <-dadda !
-
joa naja für char arrays gehts aber nicht für strings

aber ich habs jetzt endlich hingekriegt (zumindest fast :D)
musste bei swordfish' lösung das _getch () vom anfang in eine for-schleife reinhauen, weil sonst kleine puffer entstanden zwischen den eingaben (also so leereingaben) sieht jetzt so aus:string read_number () { string input; int ch; for (ch = _getch (); ch != '\r'; ch = _getch ()) { if (isdigit (ch)) { input += ch; putch (ch); } } putch (ch); return input; }jetzt wird aber beim sofortigen enter drücken eine zufallszahl eingesetzt, wenn eben nichts drin steht, das muss ich noch i-wie wegbekommen

-
zu spät *g*
-
Fake oder Echt schrieb:
joa naja für char arrays gehts aber nicht für strings

string str("123"); cout << atoi(str.c_str());hihihi
-
*sich pfanne nehm und auf kopf hau*
ok danke, wie schön, dass ich das andauernd hier i-wo sehe aber im ernstfall es nicht finde
naja das andere bleibt noch mal sehn was sich da ergibt
edit: sehr schön, dadurch konnte ich mir auch sstream sparen, d.h 28 kb weniger *g*
-
ehm und was passiert, wenn in str keine Zahl steht? (Tipp: 0 wird ausgegeben!)