注册 登录
编程论坛 C语言论坛

结构体程序错误,请大佬帮忙看卡慢慢

暴君Dentiny 发布于 2019-09-05 13:49, 2947 次点击
输出的时候出现了问题,输出结果在下面,在输出第二个学生信息的时候还没输入学生名字就直接到学生性别了

程序代码:
#include<stdio.h>
int main()
{
    struct Studens
    {
        char name[60];
        char gender[5];
        int studen_number;
        float grade;
    }studen1,studen2;
    puts("录入first学生信息:");
    puts("");
    printf("学生名字:"); fgets(studen1.name, 60, stdin);
    puts(" ");
    printf("学生性别:"); fgets(studen1.gender, 5, stdin);
    puts(" ");
    printf("学号:"); scanf_s("%d", &studen1.studen_number);
    puts(" ");
    printf("输入学生成绩:"); scanf_s("%f", &studen1.grade); puts("");
    puts("录入second学生信息:");
    puts("");
    printf("学生名字:"); fgets(studen2.name, 60, stdin);
    puts(" ");
    printf("学生性别:"); fgets(studen2.gender, 5, stdin);
    puts(" ");
    printf("学号:"); scanf_s("%d", &studen2.studen_number);
    puts(" ");
    printf("输入学生成绩:"); scanf_s("%f", &studen2.grade);
    printf("是否比较两个学生的成绩:");
    printf("是按1\t否按2\n");
    int a;
    scanf_s("%d", &a);
    switch (a)
    {
    case '1':
        if (studen1.grade > studen2.grade)
        {
            printf("名字:%s\n性别:%s\n学号:%d\n成绩:%.2f\n", studen1.name, studen1.gender, studen1.studen_number, studen1.grade);

        }
        if(studen1.grade < studen2.grade)
        {
            printf("名字:%s\n性别:%s\n学号:%d\n成绩:%.2f\n", studen2.name, studen2.gender, studen2.studen_number, studen2.grade);

        }break;
        
   
    default:printf("滚吧"); break;
}
    return 0;
}
只有本站会员才能查看附件,请 登录

输出结果
录入first学生信息:

学生名字:纽约

学生性别:男

学号:20

输入学生成绩:738728

录入second学生信息:

学生名字:
学生性别:


[此贴子已经被作者于2019-9-5 13:53编辑过]

5 回复
#2
rjsp2019-09-05 14:14
scanf_s("%f", &studen1.grade);
读入了成绩后,还可能余下一些空白字符(最起码'\n'是肯定有的)
然后你用 fgets(studen2.name, 60, stdin); 获得成绩后面的那些数据。
#3
暴君Dentiny2019-09-05 16:53
回复 2楼 rjsp
那如果是您,您会怎么改
#4
Mr_doge2019-09-06 16:17
类似scanf()这样的不取换行符的库函数,可以在使用后加上一个小循环取走剩下的字符(包括换行符)并丢弃
while(getchar()!='\n')
    continue;
#5
zhouaichun2019-09-10 16:05
#include<stdio.h>
int main()
{
    struct Studens
    {
        char name[60];
        char gender[5];
        int studen_number;
        float grade;
    }studen1,studen2;
    puts("录入first学生信息:");
    puts("");
    printf("学生名字:"); fgets(studen1.name, 60, stdin);
    puts(" ");
    printf("学生性别:"); fgets(studen1.gender, 5, stdin);
    puts(" ");
    printf("学号:"); scanf("%d", &studen1.studen_number);
    puts(" ");
    printf("输入学生成绩:"); scanf("%f", &studen1.grade);
    getchar();
    puts("录入second学生信息:");
    puts("");
    printf("学生名字:"); fgets(studen2.name, 60, stdin);
    puts(" ");
    printf("学生性别:"); fgets(studen2.gender, 5, stdin);
    puts(" ");
    printf("学号:"); scanf("%d", &studen2.studen_number);
    puts(" ");
    printf("输入学生成绩:"); scanf("%f", &studen2.grade);
    printf("是否比较两个学生的成绩:");
    printf("是按1\t否按2\n");
    int a;
    scanf("%d", &a);
    switch (a)
    {
    case 1:
        if (studen1.grade > studen2.grade)
        {
            printf("名字:%s\n性别:%s\n学号:%d\n成绩:%.2f\n", studen1.name,
            studen1.gender, studen1.studen_number, studen1.grade);

        }
        if(studen1.grade < studen2.grade)
        {
            printf("名字:%s\n性别:%s\n学号:%d\n成绩:%.2f\n", studen2.name,
            studen2.gender, studen2.studen_number, studen2.grade);

        }break;
        
   
    default:printf("滚吧"); break;
}
    return 0;
}
#6
zhouaichun2019-09-10 16:06
回复 5楼 zhouaichun
试试这个程序
1