Почему 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;
}
Обмен двухscanf
s решает проблему, а также (прокомментировал)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
?