kleines Problem mit Rechnung
-
Probier mal das:
printf("zahl %d", atoi (&ziffer));
-
hey,
danke es funktioniert.Aber verstehe immer noch nicht, warum das andere nicht richtig läuft? was bezweckt die die Funktion atoi? und der adressoperator?
Anders ist das mit getch(); nicht zu lösen?
-
pitchy schrieb:
was bezweckt die die Funktion atoi? und der adressoperator?
Die Funktion atoi (ascii to int) "wandelt" einen String in ein Integer um. Den Adressoperator benötigst du, da die Funktion eine Adresse als Argument erwartet.
http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/
Meine Variante mit getch() und isdigit():
int main () { char input = 0; int zahl = 0; while (isdigit (input = getch ())) zahl = zahl * 10 + atoi (&input); printf ("%i\n", zahl); return 0; }
-
also, läßt sich das ganze so verallgemeinern, wenn man getch(); benutzt?
sprich..
printf("zahl %d",atoi(&wert_aus_getch));
-
pitchy schrieb:
also, läßt sich das ganze so verallgemeinern, wenn man getch(); benutzt?
Ja.
-
monstermunchkin schrieb:
char input = 0; ... zahl = zahl * 10 + atoi (&input); ... }
das ist ein bug.
atoi
erwartet ein C-String, eine \0-terminierte Zeichenkette, nicht bloß nur einen char-Zeiger.richtig wäre:
char input[2] = {0, 0}; ... while (isdigit (input[0] = getch ())) zahl = zahl * 10 + atoi (input); ... }
und die performanteste Variante (außerdem liefer
getch
int und nichtchar
zurück)int input; ... while (isdigit (input = getch ())) zahl = zahl * 10 + input - '0'; ... }
-
supertux schrieb:
atoi
erwartet ein C-String, eine \0-terminierte Zeichenkette, nicht bloß nur einen char-Zeiger.Stimmt, die terminierende \0 hatte ich total vergessen.
supertux schrieb:
außerdem liefer getch int und nicht char zurück
Das spielt doch hier keine Rolle, da der Rückgabewert im Wertebereich eines Characters liegt, oder doch?!
-
monstermunchkin schrieb:
supertux schrieb:
außerdem liefer getch int und nicht char zurück
Das spielt doch hier keine Rolle, da der Rückgabewert im Wertebereich eines Characters liegt, oder doch?!
wenn das so wäre, würde
getchar
ein char liefern. http://en.wikipedia.org/wiki/Fopen#The_EOF_pitfall
-
Okay. Wieder etwas dazugelernt. Dankeschön
-
Hey ich bins nochmal,
bin erst jetzt dazu kommen, dass ganze zu testen.int main () { char input[2] = {0, 0}; int zahl; while (isdigit (input[0] = getch ())) zahl = zahl * 10 + atoi (input); printf("%i", zahl); return 0; }
wenn ich das ganze compiliere, kommt nicht das gewünschte Ergebnis zu stande. Doch den Adressoperator benutzen?
Beste Grüße pitchy
-
pitchy schrieb:
wenn ich das ganze compiliere, kommt nicht das gewünschte Ergebnis zu stande.
Das ist nicht gerade eine ausreichende Fehlerbeschreibung...
-
Bei Eingabe einer zwei kommmt keine zwei raus- sondern ein "x" beliebiger Zahlenwert.
grüße
-
pitchy schrieb:
int zahl;
^^ist nicht initialisiert. da steht irgendein mist drin, mit dem deine rechnung startet. mach: int zahl = 0;