C:带字段队长的Scanf字符串"%*"应用于while循环中的转换说明符

时间:2017-04-14 11:16:51

标签: c scanf conversion-specifier

我已经定义了一个结构

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 ]"字段跳过,它会更好一些,但教科书会告诉您使用它。

1 个答案:

答案 0 :(得分:-3)

试试这个

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