关于#http#的问题,如何解决?

img


我输出学号,名字之后按回车 他就直接开始运行了

img


之后结果不对


 
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/44776601087612.png "#left")
运行的时候不知道这里是哪错了,能运行
还有我不知道该这么输入数据
 
 
 
#include
struct Student
{
    int num, score[3];//学号  三门成绩
    int avg;//平均成绩
    char name[20];//个人名字
}stu[10];
int main()
{
    int sum, i, j, max, n;//定义三个成绩之和,i,j循环,平均值最大值,n用来表达最大那个学生的号码
    for (i = 0; i < 10; i++)
    {
        scanf_s("num=%d", &stu[i].num);
        scanf_s("name=%s", &stu[i].name);//输入每个人的学号,名字
        for (j = 0; j < 3; j++)
        {
            scanf_s("%d", &stu[i].score[j]);//输入每个人三个成绩
        }
    }
    for (i = 0; i < 10; i++)
    {
        sum = 0;//sum使每个人的初始总和值为0
        for (j = 0; j < 3; j++) {
            sum = sum + stu[i].score[j];//每个人的总和
        }
        stu[i].avg = sum / 3;//每个人的平均值
        printf_s("%d", sum);//输出总和
        printf_s("%d\n", stu[i].avg);//输出平均
    }
    max = stu[0].avg;//假使最大值是第一个人的平均值
    {
        for (i = 0; i < 10; i++)
        {
            if (stu[i].avg > max)//判断大小
            {
                max = stu[i].avg;//选出最大值
                n = i;//选出最大值的人的号码
            }
        }
 
        printf_s("mame=%s\n", stu[n].name);//输出最大值的名字
        printf_s("num=%d\n", stu[n].num);//输出最大值的人的学号
        printf_s("score1=%d\n,score2=%d\n,score3=%d\n", stu[n].score[0], stu[n].score[1], stu[n].score[2]);//输出最大值的人的三个成绩
        printf_s("avg=%d", stu[n].avg);//输出最大值的人的平均值
    }
    return 0;
}

因为scanf_s没有正确读取到对应的值

应该是因为输入的方式不对,需要把每个学生的学号,姓名,3门成绩依次输入,而不是先输入所有学生的学号,姓名,所有成绩。

然后还有其他一些细节的问题,如学生平均分成员变量的数据类型可以使用浮点数类型,scanf()函数里面使用的格式说明符不需要加"num="或"name="等。

下面的代码在Dev-C++测试,所以scanf_s,printf_s等修改为了scanf和printf;然后为了测试方便,把学生的个数设置为3.

修改如下:

参考链接:


https://blog.csdn.net/wll1228/article/details/105969580


#include<stdio.h>
#define N 3  //  为了测试方便,学生个数设置为3 
struct Student
{
    int num, score[3];//学号  三门成绩
    double avg;//平均成绩 ,使用double类型,因为平均分有小数 
    char name[20];//个人名字
}stu[10];
int main()
{
    int sum, i, j, max, n;//定义三个成绩之和,i,j循环,平均值最大值,n用来表达最大那个学生的号码
    for (i = 0; i < N; i++)
    {
        scanf("%d", &stu[i].num);
        scanf("%s", stu[i].name);//输入每个人的学号,名字,获取学生字符串姓名这里不需要加取址符& 
        for (j = 0; j < 3; j++)
        {
            scanf("%d", &stu[i].score[j]);//输入每个人三个成绩
        }
    }
    
    for (i = 0; i < N; i++)
    {
        sum = 0;//sum使每个人的初始总和值为0
        for (j = 0; j < 3; j++) {
            sum = sum + stu[i].score[j];//每个人的总和
        }
        stu[i].avg = sum / 3.0;//每个人的平均值
        printf("%d,", sum);//输出总和
        printf("%f\n", stu[i].avg);//输出平均
    }
    
    
    max = stu[0].avg;//假使最大值是第一个人的平均值
    {
        for (i = 0; i < N; i++)
        {
            if (stu[i].avg > max)//判断大小
            {
                max = stu[i].avg;//选出最大值
                n = i;//选出最大值的人的号码
            }
        }
 
        printf("mame=%s\n", stu[n].name);//输出最大值的名字
        printf("num=%d\n", stu[n].num);//输出最大值的人的学号
        printf("score1=%d\nscore2=%d\nscore3=%d\n", stu[n].score[0], stu[n].score[1], stu[n].score[2]);//输出最大值的人的三个成绩
        printf("avg=%f", stu[n].avg);//输出最大值的人的平均值
    }
    return 0;
}

img

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^