kleines Problem mit Rechnung
-
ziffer=getch(zahl);
So geht das nicht. getch hat keine Parameter, d.h. man ruft es so auf:
ziffer=getch();
Die gedrückte Taste steht dann in ziffer.
-
Belli schrieb:
ziffer=getch(zahl);
So geht das nicht. getch hat keine Parameter, d.h. man ruft es so auf:
ziffer=getch();
Die gedrückte Taste steht dann in ziffer.
Ja, ist mir gar nicht aufgefallen. Und dann hat man erst mal ne Endlosschleife, weil zahl nie >9 wird...
-
hey,
habe das ganze nun mit ziffer=getch(); ausprobiert.. scheint aber immer noch nicht zu funktionieren.hab einfach mal die schleifen rausgenommen:
#include <stdio.h> #include <stdlib.h> int main() { char ziffer=0; int zahl=0; printf("Postive Zahl eingeben:\n"); ziffer=getch(); printf("zahl %d", ziffer); return 0; }
Einfach mal Codeauschnitt, um die getch Funktion zu testen.
-
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;