Fehlerabfrage!



  • Ist die bestätigung mit Enter schuld?



  • Das ganze sieht jetzt so aus:

    #include<stdio.h>
    
    int main()
    {
        char zeichen;
    	int zahl;
    
    	zahl = 0;
    
    	do
    	{
    		zeichen = getchar();
    		//printf("\n*****************\nEingegeben: %d\n", zeichen);
    
    		if((zeichen < 48) || (zeichen > 57))
    		{
    			printf("Eingegebenes Zeichen ist keine Zahl! \n");
    		}
    		else
    		{
    			zahl = zeichen - 48;
    			printf("Eingegebenes Zeichen ist Zahl! \n");
    		}
    
    	}
    	while(zahl != '\n');
    
    return 0;
    }
    

    Wenn ich nun z.B. auf meinem Ziffernblock eine 5 drücke, bekomm ich als Ausgabe beide Meldungen! Ich verstehs echt nicht was da los ist...



  • Ja, Du kriegst doch nach Deinem eingegebenen Zeichen immer noch die 10 für die Enter-Taste.



  • Kannst ja mal anstelle von 5 eine Zahl mit mehr Ziffern eingeben, zB 5468 ... oder so.



  • Für (zeichen < 48) || (zeichen > 57) gibt es isdigit() aus der <ctype.h> bzw. die Negation davon.
    Und das verlangt nicht mal ASCII.



  • Ich hab mit nachfolgenden Code mal versucht, dass ich mir das Return, also die 10, rausfilter. Aber irgendwie ist es mir nicht so gelungen. Die Return-Taste ist immer noch mitdabei!

    #include<stdio.h>
    
    int main()
    {
        char zeichen;
        int zahl;
    
        zahl = 0;
    
        do
        {
            zeichen = getchar();
            //printf("\n*****************\nEingegeben: %d\n", zeichen);
    
            if((zeichen < 48) || (zeichen > 57) || (zeichen == 10))
            {
                printf("Eingegebenes Zeichen ist keine Zahl! \n");
            }
            else
            {
                zahl = zeichen - 48;
                printf("Eingegebenes Zeichen ist Zahl! \n");
            }
    
        }
        while(zahl != '\n');
    
    return 0;
    }
    


  • Bei if((zeichen < 48) || (zeichen > 57) || (zeichen == 10)) liegt 10 doch schon bei < 48



  • #include<stdio.h>
    
    int main()
    {
        char zeichen;
        int zahl;
    
        zahl = 0;
    
        do
        {
            zeichen = getchar();
            //printf("\n*****************\nEingegeben: %d\n", zeichen);
    
            if(zeichen == 10)
                continue;
    
            if((zeichen < 48) || (zeichen > 57))
            {
                printf("Eingegebenes Zeichen ist keine Zahl! \n");
            }
            else
            {
                zahl = zeichen - 48;
                printf("Eingegebenes Zeichen ist Zahl! \n");
            }
    
        }
        while(zahl != '\n');
    
    return 0;
    }
    


  • getchar liefert auch eigentlich ein int und kein char zurück 😉



  • if ((zeichen < '0') || (zeichen > '9')) sollte es doch tun und hats in
    Programmen von mir auch schon getan...


Anmelden zum Antworten