Warum verbraucht scanf (“% d”, […]) nicht '\ n'? während scanf ("% c") tut?

HierIch sah diese Aussage in der akzeptierten Antwort:

Die meisten Konvertierungsspezifizierer überspringen jedoch führende Leerzeichen einschließlich Zeilenumbrüchen%c nicht.

Für mich ist die Begründung für dieses unterschiedliche Verhalten nicht klar, ich hätte ein einheitliches erwartet (z. B. immer überspringen oder nie).

Ich bin mit einem Teil des C-Codes wie diesem auf diese Art von Problem gestoßen:

#include "stdio.h"

int main(void){

    char ch;
    int actualNum;

    printf("Insert a number: ");
    scanf("%d", &actualNum);
    // getchar();

    printf("Insert a character: ");
    scanf("%c", &ch);

    return 0;
}

Die beiden tauschenscanfs löst das Problem, sowie die (kommentierte)getchar, ansonsten der'\n' der erste Einfügung würde von der zweiten verbraucht werdenscanf mit%c. Ich habe auf gcc sowohl unter Linux als auch unter Windows getestet, das Verhalten ist das gleiche:

gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2)
Copyright (C) 2012 der Free Software Foundation, Inc.
Dies ist freie Software; Informationen zu den Kopierbedingungen finden Sie in der Quelle. Es gibt keine Garantie; nicht einmal für die MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.

Meine Frage lautet also: Warum?%d und%c anders verhalten w.r.t.'\n' imscanf?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage