Fehlerabfrage!



  • Hi Leute!

    Folgende Aufgabe hab ich zu bewältigen:
    Der Algorithmus liest die Ziffern einer pos. ganzen Zahl als Zeichen und berechnet den entsprechenden Zahlenwert. Taucht ein Zeich auf, das keine gültige Ziffer ist, soll eine Fehlermeldung ausgegeben werden und das Zeichen für die Berechnung der Zahl ignoriert werden.

    Mein Code bisher:

    #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;
    }
    

    Das Problem an meinem Code ist, dass er mir Zahlen und Sonderzeichung un buchstaben eben nicht richtig erkennt. Ich weiß aber nicht warum, denn in der if-Abfrage hab ich ja die ASCII-Werte richtig angegebenen für die er eben die Fehlermeldung ausgeben soll!

    Könnt ihr mir helfen?



  • bandchef schrieb:

    denn in der if-Abfrage hab ich ja die ASCII-Werte richtig angegebenen für die er eben die Fehlermeldung ausgeben soll!

    Nö, hast Du nicht richtig angegeben. Dein Bereich ist zu groß und interpretiert auch die Zeichen 47 und 58 als Zahlen.



  • 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