scanf-logik



  • Guten Abend!

    Ich habe gemerkt :
    Ich gebe ein : 99999999999999999999999

    scanf("%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 : 99999AB9999999

    scanf("%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:


Anmelden zum Antworten