C: строка Scanf с полевым шкипером "%*", примененным к спецификатору преобразования в цикле while
Я определил структуру
typedef struct EMP {
char name[100];
int id;
float salary;
} EMP;
и я использую его в цикле while для ввода
EMP emprecs[3];
int i;
i = 0;
while (i < 3) {
printf("\nEnter Name: ");
scanf("%*[\n\t ]%[^\n]s", emprecs[i].name);
printf("\Enter Id: ");
scanf("%d", &emprecs[i].id);
printf("\nEnter Salary: ");
scanf("%f", &emprecs[i].salary);
i++;
}
но цикл принимает только имя и пропускает все остальные входные данные после этого (он завершается, но с пустым вводом). Этот пример взят из учебника по Си, так в чем же проблема?
Работает несколько лучше без "%*[\n\t ]"
поле пропустить, но учебник говорит вам использовать его.
1 ответ
Решение
Попробуй это
scanf(" %*[\n\t ]%[^\n]s", emprecs[i].name);
^^^
White space
вместо
scanf("%*[\n\t ]%[^\n]s", emprecs[i].name);
Также,
scanf(" %d", &emprecs[i].id);
scanf(" %f", &emprecs[i].salary);