Zeichenketteumwandeln
-
Hallo,
dieses Programm soll eine Zeichenkette in einen integer umwandeln,
also z.B: [1][0][1] in 101;
irgendwo ist da der Wurm drin, ich denk mal bei den Zeigerübergaben,
da bin ich noch nicht so sicher#include <stdio.h> #include <stdlib.h> #include <string.h> int Umwandeln(char *string){ int laenge = strlen(string)-1; int i = 0; int zahl = 0; int b = 1; for(i=laenge;i>0;i--){ zahl = (string[i]-48)*b; b = b * 10; } return zahl; } int main(){ char *string; printf("Geben Sie ihre Zahlenzeichenkette (max 10 Zahlen) ein:\n"); fgets(string,11,stdin); printf("%d", Umwandeln(&string)); system("Pause"); return 0; }
-
Hab mir nicht alles angesehen, aber auf den ersten Blick überschreibst du 'zahl' bei jeder Iteration. Du musst aufsummieren.
-
lass in zeile 27 den adressoperator weg.
du hast im main einen pointer und die funktion erwartet einen pointer. also einfach nur Umwandeln(string)
-
Minimi schrieb:
Hallo,
dieses Programm soll eine Zeichenkette in einen integer umwandeln,
also z.B: [1][0][1] in 101;
irgendwo ist da der Wurm drin, ich denk mal bei den Zeigerübergaben,
da bin ich noch nicht so sicherDa ist offensichtlich der "Zeiger hat keinen gültigen Speicher zugewiesen bekommen Wurm" drin.
Gruß,
B.B.
-
#include <stdio.h> int Umwandeln(char *string){ int laenge = strlen(string)-1; int i=0, zahl = 0, b = 1; for(i=laenge-1;i>=0;i--){ zahl+= (string[i]-48)*b; b*= 10; } return zahl; } int main(){ char string[11]; printf("Geben Sie ihre Zahlenzeichenkette (max 10 Zahlen) ein:\n"); fgets (string,11,stdin); printf("zahl ist: %d\n", Umwandeln(string)); system("Pause"); return 0; }
problem war:
- der pointer string zeigte ins Nirwana, bzw. war nicht initialisiert,( ein char* string="abcd..." haette uebrigens auch nicht funktioniert, da damit ein const char angelegt wird, der in einem Bereich angelegt wird, der gegen Überschreiben geschützt ist )
- die for schleife ging ueber den falschen Bereich ( >0 statt >=0 )
- und natuerlich das aufsummieren in: zahl = zahl + ...kritisch ist noch die Rückgabe einer tmp. Variablen ( zahl ) aus der Funktion, da die auf dem stack nur temporaer zur Verfügung steht, sollte man das normalerweise vermeiden aber fuer die direkte Ausgabe in printf ... sollte es ok sein, funktioniert jedenfalls. ( was sagen die experten dazu ??)
besser waere es, wenn man die variable vor dem Funktionsaufruf definieren und der Funktion dann per pointer uebergeben wuerde ...