Я пытаюсь прочитать пользовательский ввод и сохранить его в виде строки, включая пробелы.Я выполнил поиск решения и указал на fgets () или scanf (% [^ \ n], str).Но оба эти решения дают мне ошибку.
Вот что у меня есть:
//MAX_CHARACTERS is set to 30
scanf("%d", &input);
if (input == 1){
int pr;
char na[MAX_CHARACTERS+1];
printf("\nEnter the name: ");
scanf("%[^\t\n]", &na);
while (strlen(na)>MAX_CHARACTERS){
printf("\nName is too long, enter new name: ");
scanf("%[^\t\n]", &na);
}// end na check
printf("\nEnter priority: ");
scanf("%d", &pr);
while (pr>MAX_PRIORITY || pr <MIN_PRIORITY){
printf("\nBad priority, enter new priority (0-100): ");
scanf("%d", &pr);
}//end pr check
Работает нормально, если я использую %s
во всех случаях %[^\t\n]
, но когда я использую %[^\t\n]
или
fgets(na, 30, stdin)
, он пропускает первое сканирование по имени и сразу переходит к «Введите приоритет:».Затем, когда я печатаю, у меня есть пустое имя с указанным приоритетом.
РЕДАКТИРОВАТЬ: Извините, пропущенные кавычки на первом scanf - опечатка.Не причина проблемы.Я набрал «1» для первого сканирования («% d», ввод).
ИСПРАВЛЕНО
Поскольку он не позволит мне опубликовать ответ,
Кто-то понял это.В случае, если кому-то все еще интересно, проблема была в первом scanf ().
scanf("%d", &input);
Он оставляет \ n в буфере.Второй принимает \ n и читает его как ввод, поэтому он пропускается.
РЕШЕНИЕ:
Установка
fflush(stdin); //right after the if statement seems to have fixed the issue.
Спасибо всем за помощь.