Probleme mit einer Funktion



  • Bei diesem Programmabschnitt möchte ich ein Zeichen mit der Funktion getch() einlesen. Dieses Zeichen soll anschließend in eine Zahl von 0 bis 9 umgewandelt werden. Hier mal der Code:

    #include <stdio.h>
    #include "conio.h"
    
    int zahl(int);
    
    int main(){
    
    	int x;
    
    	zahl(x); //Hier ist x ein Wert von 0 bis 9
    
    	printf("\n%d\n", x); //Hier ist x aber wieder 0
    
    	//Hier möchte eich eig mit dem Wert von x weiterarbeiten
    
    	return 0;
    
    }
    
    int zahl(int x){
    
    	start:
    
    	printf("\n>> ");
    
    	x = getch();
    
    	printf("%d", x);
    
    	if(x == 48){
    		x = 0;
    		printf("\nx = %d", x);
    	}
    	else if(x == 49){
    		x = 1;
    		printf("\nx = %d", x);
    	}
    	else if(x == 50){
    		x = 2;
    		printf("\nx = %d", x);
    	}
    	else if(x == 51){
    		x = 3;
    		printf("\nx = %d", x);
    	}
    	else if(x == 52){
    		x = 4;
    		printf("\nx = %d", x);
    	}
    	else if(x == 53){
    		x = 5;
    		printf("\nx = %d", x);
    	}
    	else if(x == 54){
    		x = 6;
    		printf("\nx = %d", x);
    	}
    	else if(x == 55){
    		x = 7;
    		printf("\nx = %d", x);
    	}
    	else if(x == 56){
    		x = 8;
    		printf("\nx = %d", x);
    	}
    	else if(x == 57){
    		x = 9;
    		printf("\nx = %d", x);
    	}
    	else{
    		printf("\nFehlerhafte Eingabe!");
    		goto start;
    	}
    }
    

    Die Funktion macht eig alles richtig und wandelt x in eine Zahl von 0 bis 9 um, aber nach dem aufrufen der Funktion ist x wieder 0.

    Wäre sehr dankbar für Antworten.



  • Du musst die Addresse von x übergeben:

    int zahl(int* x)
    

    Das ruftst du dann so auf:

    zahl(&x);
    

    Um über die Addresse auf x zuzugreifen, musst du einen * voransetzen.

    *x = getch();
    

    Deine Methode, in eine Zahl umzuwandeln kannst du aber auch einfacher haben:

    *x -= '0';
    

    Warum gibst du hier aber int zurück, wenn du die Variable als Parameter nimmst? Mach es so (Überprüfungen einmal weggelassen):

    int zahl()
    {
        int tmp = getch();
        tmp -= '0';
        return tmp;
    }
    

    Und so ganz nebenbei: Die Funktion sollte eigentlich ziffer heißen 😉



  • gotonox schrieb:

    //Hier ist x ein Wert von 0 bis 9

    An der Stelle ist x nicht initialisiert und kann daher jeden int-Wert annehmen.

    Lies in deinem C-Buch nochmal das Kapitel über die Gültigkeit von Variablen.
    Lies in deinem C-Buch nochmal das Kapitel über Schleifen.
    Lies in deinem C-Buch nochmal das Kapitel über switch().
    Lies in deinem C-Buch nochmal das Kapitel über Funktionen und deren Rückgabewert.
    Lies in deinem C-Buch nochmal das Kapitel über Call by Value und Call by Reference.

    Und mach dich schlau wann goto sinnvoll ist. In deinem Beispiel jedenfalls nicht.

    Und denke daran: C ist kein BASIC.


Anmelden zum Antworten