Использование "\n" в scanf() в C - программирование
Подтвердить что ты не робот

Использование "\n" в scanf() в C

Я ошибочно использовал scanf("%d\n",&val); в одной из моих программ, я не мог понять поведение, показанная функция.

int main(){
    int val;
    scanf("%d\n", &val);
    printf("%d\n", val);
    return 0;
}

Теперь программе требуется 2 целых ввода и печатает первый введенный ввод. Какая разница в том, что добавляет дополнительный \n?

Я попытался выполнить поиск, но не смог найти ответ, даже с помощью руководства scanf.

4b9b3361

Ответ 1

An '\n' - или любой символ пробела - в строке формата используется целая (возможно, пустая) последовательность пробельных символов на входе. Таким образом, scanf возвращается только тогда, когда он встречает следующий символ без пробелов или конец входного потока (например, когда вход перенаправляется из файла и его конец достигнут или после того, как вы закрыли stdin с помощью Ctrl-D).

Ответ 2

От man scanf в моем ящике Linux:

Директива является одной из следующих:

Последовательность символов пробела (пробел, табуляция, новая строка и т.д., см. isspace (3)). Эта директива соответствует любому количеству пробелов, в том числе ни одного, на входе.

BTW, %d также является директивой.

Таким образом, ваш "%d\n" имеет две директивы, первая - число и вторая... хорошо читает любое количество пробелов, включая конечные строки. Вы должны ввести любой небелый пробел, чтобы остановить его.