Dlaczego scanf („% d”, […]) nie zużywa „n”? podczas gdy scanf („% c”) robi?

Tutaj, Widziałem to stwierdzenie w przyjętej odpowiedzi:

Większość specyfikatorów konwersji pomija wiodące białe znaki, w tym znaki nowej linii, ale%c nie.

Dla mnie nie jest jasne, jakie jest uzasadnienie tych różnych zachowań, oczekiwałbym takiego jednolitego (np. Zawsze pomijając lub nigdy).

Przyszedłem do tego rodzaju problemu z takim fragmentem kodu C, jak ten:

#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;
}

Zamiana dwóchscanfs rozwiązuje problem, jak również (skomentowane)getchar, w przeciwnym razie'\n' pierwszej wstawki zostanie zużyta przez drugąscanf z%c. Przetestowałem na gcc zarówno w systemie Linux, jak i Windows, zachowanie jest takie samo:

gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2)
Copyright (C) 2012 Free Software Foundation, Inc.
To jest wolne oprogramowanie; zobacz źródło warunków kopiowania. NIE ma gwarancji; nawet dla PRZYDATNOŚCI HANDLOWEJ lub PRZYDATNOŚCI DO OKREŚLONEGO CELU.

Moje pytanie brzmi: dlaczego%d i%c zachowywać się inaczej w.r.t.'\n' wscanf?

questionAnswers(4)

yourAnswerToTheQuestion