Fehlerabfrage!



  • Hm, ok!

    Dann mach ich es jetzt so:

    #include<stdio.h>
    
    int main()
    {
        char zeichen;
        int zahl;
    
        zahl = 0;
    
        do
        {
            zeichen = getchar();
    
            if((zeichen < 47) || (zeichen > 58))
            {
                printf("Eingegebenes Zeichen ist keine Zahl!");
    
            }
                    else
                    {
                    zahl = zeichen - 48;
                    }
        }
        while(zahl != '\n');
    
    return 0;
    }
    

    Funktioniert aber genauso wenig...

    Das komische ist aber, wenn ich das programm mit dem Debugger schrittweise durchmache, dann geht der code so wie ich es will. wenn ich dei generierte exe aufmache gehts nicht mehr...



  • Wo hast Du denn da was geändert? Zeichen 47 und 58 werden immer noch als Ziffern interpretiert.



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

    sorry, habs im VS 2010 geändert aber nicht im board... 🙂



  • Und bau mal Deinen else-Zweig so um:

    else
    {
       zahl = zeichen - 48;
       printf("\nEingegebenes Zeichen ist Zahl!");
    }
    


  • Jetzt sieht's so aus:

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


  • und dann mach mal hinter

    zeichen = getchar();
    

    die Anweisung:

    printf("\n*****************\nEingegeben: %d\n", zeichen);
    

    Merkst Du was?



  • Hinter "Eingegebenes Zeichen ist ....

    solltest Du ein \n machen, der Übersichtlichkeit wegen.



  • Sorry, mekr da grad nicht so was das soll... 😞



  • 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