为什么运行时sex和score会连在一起


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct stu
 {
 int num;
 char *name;
 char sex;
 float score;
 } boy1,boy2;
main()
{
 printf("input num:");
 scanf("%d",&boy2);
 printf("input name:");
 scanf("%s",&boy2);
 printf("input sex:");
 scanf("%c",&boy2);
 printf("input score:");
 scanf("%f",&boy2);
 printf("number=%d",boy2.num);
 printf("name=%s",boy2.name);
 printf("sex=%c",boy2.sex);
 printf("number=%f",boy2.score);
}

运行时会发生
intput sex:input score:
的情况

img


scanf char前面加getchar()消除缓存
你那个打印不了,帮你改了

 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct stu
 {
 int num;
 char name[15];
 char sex;
 float score;
 } boy1,boy2;
main()
{
 printf("input num:");
 scanf("%d",&boy2.num);
 printf("input name:");
 scanf("%s",&boy2.name);
 printf("input sex:");
 getchar();
 scanf("%c",&boy2.sex);
 
 printf("input score:");
 scanf("%f",&boy2.score);
 printf("number=%d\n",boy2.num);
 printf("name=%s\n",boy2.name);
 printf("sex=%c\n",boy2.sex);
 printf("number=%2f\n",boy2.score);
}

getchar()处理一下换行就可以了,还有结构体成员变量输入赋值应该指定boy2.num,boy2.name等

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct stu
 {
 int num;
 char name[30];
 char sex;
 float score;
 } boy1,boy2;
main()
{
 printf("input num:");
 scanf("%d",&boy2.num);
 printf("input name:");
 scanf("%s",boy2.name);
 getchar();
 printf("input sex:");
 scanf("%c",&boy2.sex);
 printf("input score:");
 scanf("%f",&boy2.score);
 printf("number=%d\n",boy2.num);
 printf("name=%s\n",boy2.name);
 printf("sex=%c\n",boy2.sex);
 printf("number=%f",boy2.score);
}

修改如下,供参考:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct stu
{
    int num;
    char name[16]; //char* name;
    char sex;
    float score;
} boy1, boy2;
int  main()
{
    printf("input num:");
    scanf("%d", &boy2.num);//修改
    getchar();
    printf("input name:");
    scanf("%s", boy2.name);  //scanf("%s", &boy2);
    getchar();
    printf("input sex:");
    scanf(" %c", &boy2.sex);//修改
    getchar();
    printf("input score:");
    scanf("%f", &boy2.score);//修改

    printf("number=%d  ",boy2.num);//修改
    printf("name=%s  ", boy2.name); //修改
    printf("sex=%c  ",  boy2.sex);  //修改
    printf("number=%f", boy2.score);
    return 0;
}

printf打印是不换行的,换行可以在最后加上\n
或者用println打印(应该是这么拼写的吧)