ueber cin eine float variable befuellen
-
Hallo zusammen,
bin leider noch ein Anfaenger in Sachen C++ und bekomme es nicht auf die Reihe.
Moechte ueber den Befehl cin eine float Variable fuellen. Jetzt hindert mich aber nichts daran auch einen Buchstaben oder mehrere einzutippen.
Die float Variable bekommt dann natürlich den Wert 0.00000.
Noch ein Problem was ich habe, wenn ich den cin in einer Schleife nutze und im ersten Durchlauf wurde ein Buchstabe eingegeben, dann kann ich beim naechsten cin gar nichts mehr eingeben. Der Befehl wird irgendwie übersprungen.
Kann mir jemand helfen?Vielen Dank im voraus
Klara Fall
-
Hallo Klara!
Mit C++ und scanf und so Zeugs kenne ich mich nicht so recht aus und das ist gut so.
Jedenfalls würde ich das so machen:
char buffer[20]; float meine_fliesskommazahl; gets(buffer); if (!isdigit(buffer[0])) { printf("Schweine im Weltall\n"); } meine_fliesskommazahl = strtod(buffer, 0);
-
Danke erstmal. Werde ich testen.
Gruss Klara Fall
-
cin ist ein objekt, das die prüfung "mitbringt"
#include<climits> //für INT_MAX ... .... float fl; while(!(std::cin >> fl)) { cout<<"Falscheingabe"; cin.clear(); cin.ignore(INT_MAX,'\n'); }
-
Vielen Dank!!
Bin zwar noch nicht so sicher was C++ angeht, werde mir jetzt aber mal das Obkejt Cin anschauen. Mir hat jemand gesagt, es sei nur eine Funktion die ich aus einer Bibliothek heraus aufrufe.
Wie ist es denn zu erklären, dass ich einen float einlesen möchte, ein string aber eingegeben wird und jeder nächste cin befehl übersprungen wird? Oder muss ich da etwas zurücksetzen?Gruss Klara Fall und nochmal vielen Dank
-
Schau dich mal im Magazin um, da habe ich einen ausfühlicheren Artikel zum Thema "Streams" geschrieben (cin ist ein ganz spezieller Eingabestream, der seine Daten von der Tastatur erhält).
Wie ist es denn zu erklären, dass ich einen float einlesen möchte, ein string aber eingegeben wird und jeder nächste cin befehl übersprungen wird? Oder muss ich da etwas zurücksetzen?
Wenn die Daten nicht erkannt wurden, geht der Stream in einen Fehlerstatus - und ignoriert dann alle weiteren Anforderungen. Zurücksetzen kannst du ihn mit cin.clear() (und mit cin.ignore() kannst du die falsche Eingabe entsorgen).