Bei Abfrage sollen nur Zahlen möglich sein,Buchstaben etc. ignorieren



  • Ich soll bei einer Abfrage dafür sorgen, dass nur die Eingabe von Zahlen möglich ist. Im Idealfall soll bereits beim drücken einer ungültigen Taste gewarnt oder ignoriert werden. Also, bei Eingabeversuch z.B. eines Buchstabens soll entweder darauf hingewiesen werden, oder die Eingabe ignoriert werden. Ist das möglich?



  • Dies ist keine direkte Frage zu C++, du brauchst dazu nicht standardisierte Funktionen.
    z.B. kbhit(), und getchar((.

    Damit kanst du feststellen ob die Eingabe eines Zeichens erfolgt ist. Dieses einzelne Zeichen kannst du dann auf seinen Gültigkeitsbereich prüfen, z.B. mit

    int isdigit( int c ); (ich weis im Moment nur nicht ob die zum Stansard gehört).

    Damit kannst du die entsprechende Eingabefunktion codieren.

    Falls das ganze unter Windows und nicht in der Console erfolgen soll, müßte ich dich ans WinApi Forum verweisen



  • Schau einfach mal in die Konsolen-FAQ unter "Reine Zahleneingaben", ist allerdings wie gesagt kein Standard.

    @PAD: getch() heißt das Zauberwort - getchar() ist C++-Standard und bringt dir nichts, kbhit() auch nicht.

    MfG SideWinder



  • @Sidewinder

    MSDN von Visual C++
    getch()

    The getch function reads a single character from the console without echoing. getche reads a single character from the console and echoes the character read. Neither function can be used to read CTRL+C. When reading a function key or an arrow key, getch and getche must be called twice; the first call returns 0 or 0xE0, and the second call returns the actual key code.

    getchar()

    or get a character from stdin (getchar, getwchar).
    Each of these functions returns the character read. To indicate an read error or end-of-file condition, getc and getchar return EOF

    Ich hoffe das die Quelle ok ist, aber dann wäre die getchar die bessere Lösung.

    Auf das kbhit() habe ich hingweisen, damit er nur falls eine Taste gedrückt wurde mit getch oder getchar den Character abholt. Wenn kein Zeichen da ist, kann er inzwischen irgendetwas anderes machen, andernfalls hängt er blockiert in der get.. Routine.



  • Die beiden zitierten Quellen weisen doch darauf hin, dass getch() die geeignetere Funktion ist. Ich denk du programmierst für Geld, müsstest du dann nicht wissen, dass getchar im Normalfall erst zurückkehrt, nachdem man Enter gedrückt hat?



  • Wie kommst du darauf, das getchar erst bei einem Enter zurückkehrt?

    Ich erinnere mich an einen thread, das jemand unter Unix/Linux durch gebufferten IO so ein Problem hatte.
    Aber sonst?

    Und getch kann bei einem Testendruck ja mehrere Inputs bekommen?



  • Hmm, vielleicht weil das so ist? 🙄 getchar() liest ein Zeichen von stdin, und der ist idR gepuffert (nein nicht nur unter Linux). getch() dagegen liest eine Taste von der Tastatur ... da nicht alle Tasten direkt einen ASCII-Code haben, gibts auch manchmal mehrere Inputs. Ich schlage vor, du machst dir mal ein kleines Beispielprogramm.



  • PAD schrieb:

    Wie kommst du darauf, das getchar erst bei einem Enter zurückkehrt?

    Aus der Borland-Hilfe:

    #include <stdio.h>
    
    int main(void)
    {
       int c;
    
    /* 
    Note that getchar reads from stdin and is line buffered; this means it will not return until you press ENTER.
     */
    
       while ((c = getchar()) != '\n')
          printf("%c", c);
    
       return 0;
    }
    

    mfg
    v R


Anmelden zum Antworten