При использовании функции scanf для ввода данных предоставляются два входа.
Начнем с того, что я программист на Python и пытаюсь изучить C. Я пытался выяснить, почему это происходит, но ничего не нашел. Вот код:
#include <stdio.h>
int main() {
int age;
printf("Enter your age: ");
scanf("%d\n", &age);
printf("Your age is %d\n", age);
return 0;
}
При запуске и отладке в VSCode я получаю следующее:
Enter your age: 23
12
Your age is 23
Любая помощь будет оценена по достоинству.
Как правило, никогда не используйте scanf
для линейного ввода. Вместо этого используйте getline
, а затем sscanf
в полученной строке. Если в вашем компиляторе все еще отсутствует getline
, его легко реализовать в виде оболочки вокруг цикла fgets
.
@o11c «Если в вашем компиляторе все еще отсутствует getline, его можно легко реализовать как оболочку цикла fgets» --> Тривиально? Зависит от того, хотите ли вы также читать нулевые символы или длинные строки.
Символ \n
в строке формата scanf
не нужен. Он сообщает scanf продолжать чтение любого количества пробельных символов, пока не найдет следующий непробельный символ.
Вместо этого просто используйте scanf("%d", &age);
«Ненужное» — это вежливый способ сказать «ужасная ловушка для неосторожных пользователей». С практической точки зрения завершение строки формата scanf()
пробелом всегда является ошибкой. (Ограниченное исключение требует, чтобы ввод был получен из файла, чтобы люди не участвовали в догадках о том, каким должен быть следующий ввод (потому что вам нужно начать вводить следующий ввод до того, как scanf()
с конечным пробелом в строке формата завершится) Да и то не обязательно и даже не желательно — можно и потерпеть, вот и всё, но это плохая идея.)