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);
我定义了一个结构体
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);