Buchstabenproblem



  • Hi erstmal bin neu hier ^^.

    Also mein Problem ist das ich den Benutzer per scanf Zahlen eingeben lassen will. Das funktioniert auch sehr gut, jedoch sobald man einen Buchstaben eingibt rechnet er alle Schritte grundlose durch.

    Mein Befehl sieht momentan so aus:

    scanf ("%d", &u);

    Hab auch schonmal anstatt %d, %c geschrieben, doch dann hat der switch Befehl die cases nicht erkannt immer nur den default ausgeführt!

    Meine Idee war scanf ("%d || %c", &u); doch dann geht garnichts ^^.

    Bitte um Hilfe. Danke schonmal.



  • Eingaben direkt mit scanf() auszuwerten ist eigentlich nie sonderlich geschickt (Ausnahme: man will kurz was testen). Besser ist es die Eingabe als String (man: fgets bietet sich hier an) entgegenzunehmen und diesen auf Korrektheit zu überprüfen. In deinem Fall z.B. mit man: isdigit und dann konvertieren, oder gleich mit man: strtol konvertieren und dessen "Rückgabe" (den 2. Parameter) überprüfen.
    Natürlich gibt es hier viele verschiedene Möglichkeiten.



  • Du könntest zB. sowas machen:

    int a;
    
    do{
    a=scanf("%c",&u);
    if(a<30 && a>39){ // ASCII-Werte für 0-9
       Fehlermeldung
    }
    else{
       break;
    }
    while(1);
    


  • johnny_legend schrieb:

    int a;
    
    do{
    /* der Rückgabewert von scanf ist _nicht_ das Zeichen das
    man einlesen will, sondern die Zahl der "gematchten" Items */
    a=scanf("%c",&u); 
    
    /* anstelle dieses Vergleichs lieber isdigit() nehmen. Und wenn
    das schon von Hand macht, dann wenigstens nicht mit 30 und 39 sondern
    mit '0' und '9'. Außerdem wären ASCII 0-9 0x30 bis 0x39, also Hex */
    if(a<30 && a>39){
    

Anmelden zum Antworten