User Eingabe überprüfen
-
Das wäre mein Vorschlag, gibt bestimmt auch kürzere, aber der ist mir eingefallen:
#include <iostream> #include <cstdio> #include <cstdlib> using namespace std; int main() { int SizeOfChar = 10; char fDollar[SizeOfChar]; bool istDollar = false; while (istDollar == false) { cout << "Please enter US amount as decimal number(i.e 23.50): "; cin >> fDollar,'\n'; for(int index = 0;index <= SizeOfChar;index++) { if ((fDollar[index] >= '0' && fDollar[index] <= '9') || fDollar[index] == '.') { istDollar = true; } else if(fDollar[index] == '\0') { break; } else { istDollar = false; break; } } cin.clear(); cin.ignore(100,'\n'); } cout << "Test bestanden!" << endl; system("pause"); }
edit // Code verbessert und in cpp eingebunden.
-
[korintenkack]
@Searence und cplusplus_
Warum so kompliziert?@Searence
[cpp]
using namespace std; // Das fehlt in deinem Code-Schnipsel.
// Wenn das Absicht war, dann solltest du vor jedem cout, cin etc. ein std:: schreiben.
[/cpp]und bitte Code-Tags benutzen: [cpp]Hier kommt der Code rein[/cpp ] (Ohne das Leerzeichen vor ])
Caipi
[/korintenkack]
-
Caipi schrieb:
[korintenkack]
@Searence und cplusplus_
Warum so kompliziert?@Searence
[cpp]
using namespace std; // Das fehlt in deinem Code-Schnipsel.
// Wenn das Absicht war, dann solltest du vor jedem cout, cin etc. ein std:: schreiben.
[/cpp]und bitte Code-Tags benutzen: [cpp]Hier kommt der Code rein[/cpp ] (Ohne das Leerzeichen vor ])
Caipi
[/korintenkack]
hmmm... wie funktioniert den deine Methode, habe die net wirklich verstanden
wenn ich ehrlich bin. ^^Er muss doch Überprüfen das keine ungültige Angaben, z.B. Buchstaben in der
Dollareingabe sind, wie soll das bei dir funktionieren?
-
#include <iostream> #include <string> #include <sstream> using namespace std; int main() { bool input = false; int counter = 0; string str1; do { str1 = ""; counter = 0; cout << "Amount of US dollars to convert = $ : "; do{ std::getline(std::cin, str1); }while(str1.empty()); //cout << fDollar << endl; string::const_iterator it = str1.begin(); // nur lesend verwendbar for(it = str1.begin(); it != str1.end(); ++it) { // pruefen ob Zahl von 0-9 eingegeben wurde, oder 1 '.' if(*it <= '9' || *it >= '0' || *it == '.') { if(*it == '.') counter++; // pruefen ob mehr als 1 '.' vorhanden sind if(counter >= 2) { input = false; break; } // pruefen ob 2 Kommastellen nach dem . vorhanden sind if(it == str1.end()-3) { if(*it != '.') { input = false; break; } } input = true; } else break; } }while(input==false); stringstream str2; str2 << str1; float fDollar = 0.0; str2 >> fDollar; cout << fDollar << endl; cin.get(); return 0; }
hi!
schau nun wird deine eingabe überprüft auf 12.22
dh.: wenn du eingibst:
12..22 -> neue eingabe
12.2 -> neue eingabe
12.23bfg -> neue eingabe
dfgfdgd -> neue eingabe4.34 -> ok
cu
-
hi!
ne weiter lösung wäre:
http://spirit.sourceforge.net/da sparst du sicherlich einige zeilen....aber hab damit noch nie was gemacht...
cu
-
Ich kann dir nen Tip geben, du kannst auch regex (Regular Expression) nutzen, denke das geht in C/C++ auch.
-
Hallo an Alle und vielen Dank für die vielen Lösungsvorschläge.
Während ich mit Caipis vorschlag gearbeitet habe
cout << " Enter amount of US dollars to convert = $ "; //Prompt user to enter Dollar amount //cin >> fDollar; //Wurde von mir entfernt while (!(cin >> fDollar))//Checking for errors in user's input { cin.clear(); cin.ignore(100,'\n'); cout << " Please enter US amount as decimal number(i.e 23.50): "; cin >> fDollar,'\n'; }
trat folgendens auf:
→ Bei der Eingabe von (z.B. 23) funktioniert das Programm und gibt mir meine Ausgabe.
aber wenn ich zum Ausgangspunkt zurückkehre (loop back):
→ Bei der Eingabe von (z.B. 23$$) bekommt der User keine Fehlermeldung und das Programm läuft durch
→ Bei der Eingabe von (z.B. !Q) bekommt man die Fehlermeldung. Gibt man aber Anschliessend eine Korrekte Zahl ein, springt das Program in die nächste Zeile und man muss die Zahl erneut eingeben damit man die Ausgabe bekommt.Für Hilfe bin ich sehr dankbar
xhitmanx
-
Habe bei while(!(cin >> fDollar)) nicht bedacht, dass auch Eingaben á la 23.2ff akzeptiert werden. (In dem Fall wird nämlich nur 23.2 in fDollar gespeichert, der Rest bleibt im Puffer).
//Edit:
@xHITMANx
Dein zweites cin >> fDollar muss weg. Aber wie bereits gesagt, der Vorschlag von mir ist so lala...Caipi
-
Weiss sonst noch wer wie ich den Code zum laufen bringen kann?
Wäre ne super Sache.
vielen Dank
HITMAN
-
Schau mal in der C++FAQ, dort gibt es iirc einen Thread, wie du einen String in eine Zahl umwandelst.
So würde ich das dann wahrscheinlich machen:Zahl einlesen (als String) Nach double konvertieren. Wenn korrekte Zahl, dann weiter, ansonsten Fehler...
Caipi