printf之后的行(“输入国家\ n”); to printf(“输入m或f \ n”);不执行像代码块一样无法看到它,因为它打印两行,我没有机会输入任何东西..这个问题总是发生在我使用struct
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct emp
{
int salary;
int age;
char name[10];
char m:1;
char nation:1;
};
int main()
{
int i,k;
char g,n;
char name2[10];
struct emp x[3];
for(i=0;i<3;i++)
{
printf("enter name\n");
scanf("%s",&name2);
strcpy(x[i].name,name2);
printf("enter salary\n");
scanf("%d",&x[i].salary);
printf("enter age\n");
scanf("%d",&x[i].age);
printf("enter nation\n");
无法看到接下来的3行并跳转到输入m或f
scanf("%c",&n);
if(n=='e'){x[i].nation==0;}
else {x[i].nation==1;}
printf("enter m or f\n");
也看不到那些线
scanf("%c",&g);
if(g=='f'){x[i].m=0;}
else if(g=='m'){&x[i]==1;}
}
for(k=0;k<3;k++)
{
if(x[i].nation=='e')
{
puts(x[i].name);
printf("%d\n",x[i].salary);
printf("%d\n",x[i].age);
if(x[i].m==0)
printf("female\n");
else {printf("male\n");}
printf("egyptian");
}
}
return 0;
}
答案 0 :(得分:2)
你必须改变
scanf("%c",&n);
到
scanf(" %c",&n); // Skip leading whitespaces
C中的数组由指针传递,因此对于
char name2[10];
您不必使用引用运算符
scanf("%s",&name2);
只是简单地做
scanf("%s",name2); // Will pass an arrays address
也可以限制输入,否则可能会发生缓冲区溢出,这会导致未定义的行为
scanf("%9s",name2);