Einbindung von itoa
-
Ich will diese Funktion in ein Programm einbinden !
/* itoa() erhält zwei Argumente: eine ganze Zahl n und einen Zeichenvektor s[]. Wenn das Ergebnis der ganzzahlugen Division n/10 nicht Null ist, ruft sich itoa selbst mit n/10 auf: if (n / 10) itoa(n / 10, s); Wenn n/10 in einem der rekursiven Aufrufe Null ist, betrachten wir die signifikanteste (äußerste linke) Ziffer in n. Wir benutzen eine static-Variable i als Index für den Vektor s[]. Wenn n negativ ist, setzen wir ein Minuszeichen in die erste Position des Vektors s[] und inkrementieren i. Wenn itoa() von den rekursiven Aufrufen zurückkehrt, werden die Ziffern von links nach rechts berechnet. Jeder Aufruf fügt '\0' hinzu, um die Zeichenkette zu beenden, und dass '\0' immer wieder überschrieben wird, nur im äußersten Aufruf nicht. */ void itoa(int n, char s[]) { static int i; if (n / 10) itoa(n / 10, s); else { i = 0; if (n < 0) s[i++] = '-'; } s[i++] = abs(n) % 10 + '0'; s[i] = '\0'; }
-
cHillb3rT schrieb:
Ich will diese Funktion in ein Programm einbinden !
Cool. Wolltest du uns das nur mitteilen, oder hast du auch eine Frage?
-
Wäre das nicht einfacher?
char zahl[100]; int x=923; sprintf(zahl, "%d", x);
-
ja wie genau mach ich das wieder....
void itoa(int n, char s[]); int main(int argc, char* argv[]) { char Eingabe[MAX]; int x; for(x=0; x <= (MAX-1); x++) Eingabe[x] = ' '; gets(Eingabe); itoa(Eingabe); return 0; }
Wenn ich des so eingebe, bekomme ich Parameterfehler. Wie kann ich diese umgehen ?!?
@ supertux:
Es soll in diesem Falle eine rekursive Funktion bestehen bleiben !
-
Schau dir nochmal ganz genau an, wieviele Parameter itoa braucht und wieviele du angibst. Wenn du dann noch passende Typen nimmst, bist du fast da.
-
Ähm, guck dir doch mal den Aufruf an ...
-
void itoa(int n, char s[]); int main(int argc, char* argv[]) { char Eingabe[MAX]; int x, y, s; for(x=0; x <= (MAX-1); x++) Eingabe[x] = ' '; gets(Eingabe); for(x=0;x<=(MAX-1);x++) { Eingabe[x] = itoa(Eingabe[x]); } return 0; }
Ich hab erstmal den Code soweit verändert, dass es so aussieht. Die Aussgabe der Zeichen ist somit besser, aber ich weiß einfach nicht was ich da nehmen soll als zusätzlichen Wert für itoa, damit der Parameterfehler nicht mehr kommt !!!
-
itoa will 2 Parameter, du übergibst immer noch nur einen. Die erste Version war übrigens besser. Vergiss diese Schleife.
-
Dann kehr ich erstmal zur ersten Version zurück.....
void itoa(int n, char s[]); int main(int argc, char* argv[]) { char Eingabe[MAX]; int x; for(x=0; x <= (MAX-1); x++) Eingabe[x] = ' '; gets(Eingabe); itoa(x, Eingabe); return 0;
So hab ich es einfach mal jetzt gemacht. Ich kann jetzt Zeichen eingeben, aber bekomme keine Ausgabe. Daran muss ich noch etwas werkeln !
-
So die Ausgabe ist fertig, nachdem ich diese auch bei einem anderen Programm mit rekursiver Funktion getestet habe:
int main(int argc, char* argv[]) { char Eingabe[MAX]; int x; for(x=0; x <= (MAX-1); x++) Eingabe[x] = ' '; gets(Eingabe); itoa(x, Eingabe); for(x = 0; x <= (MAX-1); x++) { printf("%d\n",Eingabe[x]); } return 0; }
Nun bekomme ich auch meine Ausgabewerte, die ich aber noch nicht so ganz deuten kann, denn es ist eine riesengroße Zahl.
Testet vielleicht mal das Programm bei euch. Ich poste nun nochmal alles:#include <stdio.h> #define MAX 100 void itoa(int n, char s[]); int main(int argc, char* argv[]) { char Eingabe[MAX]; int x; for(x=0; x <= (MAX-1); x++) Eingabe[x] = ' '; gets(Eingabe); itoa(x, Eingabe); for(x = 0; x <= (MAX-1); x++) { printf("%d\n",Eingabe[x]); } return 0; } /* itoa() erhält zwei Argumente: eine ganze Zahl n und einen Zeichenvektor s[]. Wenn das Ergebnis der ganzzahlugen Division n/10 nicht Null ist, ruft sich itoa selbst mit n/10 auf: if (n / 10) itoa(n / 10, s); Wenn n/10 in einem der rekursiven Aufrufe Null ist, betrachten wir die signifikanteste (äußerste linke) Ziffer in n. Wir benutzen eine static-Variable i als Index für den Vektor s[]. Wenn n negativ ist, setzen wir ein Minuszeichen in die erste Position des Vektors s[] und inkrementieren i. Wenn itoa() von den rekursiven Aufrufen zurückkehrt, werden die Ziffern von links nach rechts berechnet. Jeder Aufruf fügt '\0' hinzu, um die Zeichenkette zu beenden, und dass '\0' immer wieder überschrieben wird, nur im äußersten Aufruf nicht. */ void itoa(int n, char s[]) { static int i; if (n / 10) itoa(n / 10, s); else { i = 0; if (n < 0) s[i++] = '-'; } s[i++] = (n) % 10 + '0'; s[i] = '\0'; }
-
Jetzt mal was grundsätzliches: Du willst eine Funktion benutzen, die einen int in einen String konvertiert, oder?
Also solltest du einen int einlesen und einen String ausgeben.
-
ja da haste Recht.... hmmm.... mom !
Also müsste ich was am Print-Befehl verändern oder ?
*unsicher ist*
-
Ich kann's nicht mehr mit ansehen...
int eingabe; char ausgabe[20]; scanf("%d", &eingabe); itoa(eingabe, ausgabe); printf("%s", ausgabe);
-
In der Mittagspause hatte ich auch eine Idee, die deiner nahe kommt, aber ich danke dir auch !