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);
Другие вопросы по тегам