Crash2001 Geschrieben 21. September 2001 Geschrieben 21. September 2001 Hi Ich versuche mich hier grade nochmal an nem Taschenrechner unter C++ und bin dabei auf das Problem gestossen, dass falls der Benutzer statt ner Zahl einen Buchstaben eingibt, der Computer den als eine Zahl interpretiert. Wie kann ich dies unterbinden? Also einfach so, dass wenn man einen oder mehrere Buchstaben eingibt, der Computer eine Fehlermeldung ausgibt. :confused: MfG Crash2001 Zitieren
Knuddlbaer Geschrieben 21. September 2001 Geschrieben 21. September 2001 Wie wird die Eingabe realisiert ? Über ein Objekt ? scanf ? Schreib das mal bitte - und ich sag Dir die lösung Zitieren
maddin Geschrieben 21. September 2001 Geschrieben 21. September 2001 naja man könnte zum beispiel das ganze mit den funktionen _kbhit und _getch erledigen. mit der funktion _kbhit kann man abfragen, ob eine taste gedrück wurde. die funktion _getch liefert das zeichen als int- wert. dieses kann man dann weiterverarbeiten. zum beispiel mit put an die standardausgabe geben. das problem ist aber, das das ganze meiner meinung nach ms spezifisch ist. Zitieren
gajUli Geschrieben 21. September 2001 Geschrieben 21. September 2001 Die Funktionen int isalpha(int letter); int isdigit(int letter); int isalnum(int letter); sind Deine Freunde! Uli Zitieren
Knuddlbaer Geschrieben 21. September 2001 Geschrieben 21. September 2001 atol is z.B. ANSI Schau mal da nach... Zitieren
gajUli Geschrieben 22. September 2001 Geschrieben 22. September 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Knuddlbaer: <STRONG>atol...</STRONG> Zitieren
Darth_Zeus Geschrieben 22. September 2001 Geschrieben 22. September 2001 ich empfehle auch "is digit" if(isdigit(eingelesenes_zeichen)) { //Zahl } else { printf("Du DAU"); .......; .......; } so oder so ähnlich sollte es aussehen. fehler sind auf inkompetenz gepaart mit müdigkeit zurückzuführen zeus Zitieren
Crash2001 Geschrieben 22. September 2001 Autor Geschrieben 22. September 2001 Hi @Knuddelbaer Also das wird über scanf bzw cin eingelesen. Ich möchte das dann halt so realisieren, dass nach der Eingabe geprüft wird, ob es sich bei den eingegebenen Sachen nur um Zahlen handelt, und falls nicht alles andere als ungültige Eingabe erkennen lassen und somit eine Nachicht ausgeben lassen. @maddin Geht das mit den zwei Funktionen? Und wenn, wie? @EisenUli Kann man das auch auf float ausweiten?Also ich denke mal, dass mit isdigit abgefragt wird, ob das eine Zahl ist, oder? Bei den anderen weiss ich jetzt nicht, was die prüfen. Kannst du das bitte nochmal posten? Und was macht atof()? @der_zeus Muss man da dann denn explizit jedeas ander Zeichen eingeben, das nicht erlaubt sein soll, oder ist das schon so automatisch? Ich werde mir jetzt mal die Sachen anschauen und gucken, ob ich das damit hinkriege. Für weiter Hilfe wäre ich natürlich trotzdem dankbar. MfG Crash2001 Zitieren
gajUli Geschrieben 22. September 2001 Geschrieben 22. September 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Crash2001: <STRONG> Und was macht atof()? </STRONG> Zitieren
Knuddlbaer Geschrieben 22. September 2001 Geschrieben 22. September 2001 bei cin kannst Du mit Flags abfragen ob die Eingabe geklappt hat. (Sorry das Buch grad net da - schau mal in der hilfe nach cin oder in einer Suchmaschiene. cin.bad() oder so war das). Eine entscheidende Frage wäre übrigens ob Du im ANSI bleiben willst (portabel) oder Dich auf einen bestimmten Compiler einschränken möchtest (da gibt es sicherlich Funktionen die das übernehmen). Wenn Dir atol atof nicht helfen und das abfragen der Flags von cin nicht genügen - wirst Du das eingegebene selbst prüfen müssen, in einer Schleife. Good luck! Zitieren
maddin Geschrieben 22. September 2001 Geschrieben 22. September 2001 also ich kann ja mal versuchen, ob ich nocheinmal ein beispiel zusammenbekomme. int main () { double zahl; int tmp; do { while (!_kbhit()); tmp = _getch(); if (tmp == '0' && tmp == '1' ... && tmp == '9' && tmp == '.') _putch(tmp); if (tmp == 224) _getch(); } while (tmp != 13); cin >> zahl; } in der bedingung der äußeren do while schleife bin ich mir nicht ganz sicher, ob es das richtige zeichen ist. es sollte dem entsprechen, was die tastatur beim drücken auf die enter taste sendet. in der schleife wird solange gewartet, bis eine taste gedrückt wurde. die funktion also einen wert ungleich 0 liefert. ist das der fall, wird das zeichen mittels _getrch() gelesen. diese wird mit den zahlen 0 - 9 und dem punkt verglichen. ist das der fall, wird das zeichen an die console gegeben und angezeigt. die zweite abfrage regelt den fall, das das gelesene zeichen gleich 224 ist. in diesem fall wurde eine funktionstaste mitgedrückt. zum beispiel STRG + S. dann wird ein zweites zeichen gesendet, das noch gelesen werden muss. das ganze geht soweit, bis das eingegeben zeichen gleich 13 ist. ob diese zahl wirklich richtig ist weiß ich wie gesagt leider nicht genau. aber man sollte das mit ein wenig ausprobieren herausbekommen. ist das auf jeden fall geschehen, werden alle zeichen gelesen. Zitieren
Knuddlbaer Geschrieben 22. September 2001 Geschrieben 22. September 2001 Das is aber auch keine portable lösung - und compilerabhängig. Der Umstand der eingabe würde helfen man ein konkretes Beispiel zu geben. Zitieren
gajUli Geschrieben 22. September 2001 Geschrieben 22. September 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Knuddlbaer: <STRONG>Das is aber auch keine portable lösung - und compilerabhängig. .</STRONG> Zitieren
maddin Geschrieben 23. September 2001 Geschrieben 23. September 2001 stimmt es waren die jungs von ms die sich diese funktionen haben einfallen lassen. es ist mir auch klar, das es nicht dem standard entspricht. allerdings hat es einige vorteile. zum beispiel werden alle nicht gewünschten zeichen auch garnicht angezeigt. für alle anderen methoden, zumindest die mir bekannt sind, muß man vorher die zeichen einlesen, um sie danach zu prüfen oder zu casten. Zitieren
gajUli Geschrieben 23. September 2001 Geschrieben 23. September 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von maddin: <STRONG>stimmt es waren die jungs von ms die sich diese funktionen haben einfallen lassen. </STRONG> Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.