C: Scanf string with field skipper "%*" applied on conversion specifier in while loop

C: Scanf string with field skipper "%*" applied on conversion specifier in while loop

我定义了一个结构体

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++;
}

但循环只接受名字并跳过之后的所有其他输入(它完成,但输入为空)。这个例子来自C教材,请问问题出在哪里?

不使用 "%*[\n\t ]" 字段跳过会更好一些,但教科书告诉您使用它。

试试这个

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);