scanf - vorgang



  • Hallo alle zusammen,

    folgender code :

    int ivar1 = 0, ivar2 = 0;
    	char cvar1 = 0;
    
    	printf("Zahl-1 : ");
    	scanf("%i", &ivar1);
    
    	printf("Zahl-2 : ");
    	scanf("%i", &ivar2);
    
    	ausgabefunktion(ivar1, ivar2);
    
    	scanf("%c", &cvar1);
    	printf("%c", cvar1);
    

    --> 1. scanf - Anweisung : Lieber scanf hole mir Daten vom Typ Ganzzahl aus dem T.puffer ( das tut er solange , bis er auf etw. stößt das != Ganzzahl ist ) . --> Stößt auf '\n' der ersten Eingabe .
    --> 2. scanf - Anweisung : So sieht der T.puffer nun aus :
    \n 3 4 5
    scanf ignoriert nicht dem Konv.spezifizierer entsprechende Zeichen, wenn diese am Anfang des T.puffers stehen --> Doch was geschieht mit diesem '\n'? Wird diese bei der 2'ten scanf - Anweisung irgendwie einfach gelöscht oder in ein int-Wert umgewandelt...



  • scanf() liest und ignoriert auch Whitespaces, die vor der nutzbaren Eingabe kommen (dazu gehört auch das \n, was dich stört).



  • Nein meine Frage :
    Ich habe insgesamt 3 Eingabe gemacht.
    1. scanf --> \n bleibt im T.puffer
    2. scanf --> \n steht am Anfang des Tastaturpuffers , z. B:
    |\n|1|2|3|\n|
    Was passiert nun bei "scanf("%i", &ivar)" mit diesem '\n' --> Wird dessen int-Wert ausgerechnet und mit in die var gelegt , verleibt dieses Zeichen im T.puffer...??



  • das letzte \n bleibt im buffer, bis es ausgelesen wird. wenn nur das im buffer ist, verharrt bei einem weiteren leseversuch für ein int das system, bis ein int im buffer vollständig enthalten ist. also eventuell +-, beliebigen menge an ziffern und ein abbrechendes zeichen.

    die regel ist: whitespaces vor zahlen werden überlesen und whitespaces hinter zahlen werden im buffer gelassen.


Anmelden zum Antworten