C:结构用法

时间:2017-08-16 20:26:56

标签: c

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;

}

1 个答案:

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