Почему scanf («% d», […]) не использует «\ n»? в то время как scanf («% c») делает?

ВотЯ видел это утверждение в принятом ответе:

Большинство спецификаторов преобразования пропускают первые пробелы, включая переводы строк, но%c не.

Для меня неясно, в чем причина такого различного поведения, я бы ожидал единого (например, всегда пропуск или никогда).

Я столкнулся с такой проблемой с куском кода на C:

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

Обмен двухscanfs решает проблему, а также (прокомментировал)getcharв противном случае'\n' первой вставки будет потребляться второйscanf с%c, Я тестировал на gcc как на linux, так и на windows, поведение одинаковое:

GCC (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2)

Copyright (C) 2012 Free Software Foundation, Inc.

Это бесплатное программное обеспечение; см. источник для условий копирования. Там нет гарантии; даже не для ИЗДЕЛИИ или ФИТНЕСА ДЛЯ ОСОБЕННОЙ ЦЕЛИ.

Итак, мой вопрос: почему%d а также%c вести себя по-разному с.р.т.'\n' в ?scanf

Ответы на вопрос(4)

Ваш ответ на вопрос