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.