scanf verändert falsche Variable
-
moin zusammen
in folgendem Quelltext hat sich nach Zeile 26 der Wert von zufall verändert und ist 0. Obwohl vorher ein andere Wert in ihr gespeichert war. Mir raucht der Kopf und ich weiß nicht mehr weiter.
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { short zufall, zahl, versuche; long sek = 0; char ch = 'i'; time(&sek); srand(sek); zufall = (rand() % 15) +1; //printf("%d",zufall); printf("\n\t **** Zahlenspiel ****"); printf("\n\nErraten Sie, in drei Versuchen, die Zufallszahl zwischan 1-15\n"); while(1) { //printf("%d",zufall); for(versuche=1;versuche<=3;versuche++) { printf("%d",zufall); fflush(stdin); printf("\n%d. Versuch: ",versuche); scanf("%d",&zahl); //printf("%d %d",zahl,zufall); if(zahl == zufall) { printf("\n Richtig!\n"); break; } else if(zahl < zufall) printf("\nZu klein."); else if(zahl > zufall) printf("\nZu groß."); if(versuche == 3) { printf("\nLeider verloren! %d war die gesuchte Zahl.\n",zufall); break; } } while(ch != 'e' && ch != 'w') { printf("Drücken Sie 'e' für ende oder 'w' um nochmal zu spielen: "); scanf("%c",&ch); } if(ch == 'e') break; } }
-
Question 12.14 unter
http://www.c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=stdioscanf("%hd",&zahl);
-
fflush(stdout); hat nicht geholfen. Was mich so sehr wundert ist die Tatsache das der Wert in der Variablen zufall vor der scanf-funktion in zeile 26 noch stimmt, aber danach in Zeile 27 nicht mehr, obwohl nicht auf die Variable zugegriffen wird.
uaparit
-
mit
scanf("%hd",&zahl);
funktioniert es :p
printf("VIELEN DANK!");
Hast du vielleicht auch noch eine erklärung dazu?
-
Ein Type Problem.
Wenn du ein short int übergibst,
muss du in formatstring das explizit angeben das es ein short int ist.Wenn du ein short int übergibst,
und in den formatstring ein falschen Typen angiebst macht er fehler.Also muss man die passenden Typen zusammenbringen.
-
Also bei short int mit %hd arbeiten. Nur warum veröndert er den Wert der Variablen zufall, die doch gar nichts mit der Variablen zahl zu tun hat? Liegt das vielleicht an den Plätzen(Adressen) im Speicher?
-
uaparit schrieb:
Also bei short int mit %hd arbeiten. Nur warum veröndert er den Wert der Variablen zufall, die doch gar nichts mit der Variablen zahl zu tun hat? Liegt das vielleicht an den Plätzen(Adressen) im Speicher?
Diese Variablen ( zufall, zahl ) liegen möglicherweise hintereinander in dem Speicher.
short zufall, zahl, versuche;
Beim typeunsicheren Aufruff von scanf wird möglicherweise zufall manipuliert.
-
Vielen Dank für deine Hilfe!