scanf-logik
-
Guten Abend!
Ich habe gemerkt :
Ich gebe ein : 99999999999999999999999scanf("%i", &ivar);
Mit "%i" sage ich scanf : Hole bitte eine int-Zahl aus dem T.puffer --> Er holt sich alle 9er : 99999999999999999999999 --> wandelt es in die max. größte in int-vars speicherbare Zahl : 2147483647; & legt es in die "ivar" ab. Wieso holt es alle 9er aus dem T.puffer?
Und meine letzte Frage :
Ich gebe ein : 99999AB9999999scanf("%i", &ivar); scanf("%i", &ivar2);
ivar = 99999; ivar2 = 134513817;
Warum ivar = 99999 ist , ist mir klar. Nur : Warum werden auf einmal die chars / Buchstaben A & B auf einmal in int-Zahlen konvertiert?
-
scanf dürfte A&B nicht konvertieren --> Wir baten ihn schließlich darum nur nach int-Zahlen zu suchen.
-
Hallo kef,
"99999AB9999999"
bei deinen 2 scanf-Anweisungen wird unmittelbar die 2. scanf-Anweisung ausgeführt.
Die erste Anweisung liest 99999 und merkt bei AB, das gehört nicht mehr dazu.
Anschließend wird noch (AB9999999 + return) eingelesen. Dieser Wert kann nicht interpretiert werden und ist deshalb zufälliger Natur. :xmas1:
Aus diesem Grund sollte nach dem ersten scanf der Tastaturpuffer geleert werden.Zeh Mau :xmas2:
-
Es ist sogar so, dass in var2 der alte Wert drin steht,
bevor er gelesen werden sollte.Also eine Initialisierung mit 0 liefert auch den Wert 0 beim unteren printf.
Ergo, der Wert wird sogar garnicht beschrieben, wenn nonsense gelesen wird. :xmas2:
Zeh Mau
:xmas1: