这个代码不知道出什么问题了,有谁可以帮我康康吗


#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
int main() {
    int players = 0; /*选手的人数*/
    float sum = 0;   /*每位选手成绩的分数总和*/
    float players_score[][5] = { 0 }; /*纪录参赛选手成绩的数组矩阵*/
    int i, j, k, t;      /*t为冒泡排序算法的中间变换参量*/
    int m, z = 4;
    float MaxScore, MinScore = 0;   /*每位参赛选手的评委评分的最高分数和最低分数*/
    float maopaopaixu[5] = { 0 };
    printf("Enter the number of players:\n");
    scanf("%d", &players);    /*输入参赛选手的人数*/
    for (i = 0; i <= players - 1; i++) { /*输入每个参赛选手的成绩*/
        printf("now player %d\n", ++i);
        printf("please input score:\n");
        for (j = 0; j <= 4; j++) {
            gets(players_score);
        };
        printf("\n");
    };
    printf("%s\40", "player");
    char judgeMan[5] = "ABCDE";
    for (i = 0; i <= 4; i++) {
        printf("judge%c\40", judgeMan[i]);
    }
    printf("total\40avervage\40MaxScore\40MinScore\n");
    for (i = 0; i <= players - 1; i++) {    /*输出每个参赛选手的成绩*/
        printf("player %d\40", ++i);
        for (j = 0; j <= 4; j++) {
            printf("%.1f\40", players_score[i][j]);
        };
        for (j = 0; j <= 4; j++) {
            sum = sum + players_score[i][j];
        }
        printf("%.1f\40", sum);    /*total值(总分)*/
        printf("%.1f\40", sum / 5); /*average值(平均分)*/
        j = 0;
        for (k = 0; k <= 4; k++) {
            maopaopaixu[k] = players_score[i][j];
            j++;               /*将players_score数组的其中一行数据列赋值给一个新数组,使其方便进行冒泡排序算法*/
        };
        for (k = 0; k <= z; k++) {
            for (int l = 1; l <= m; l++) {
                if (maopaopaixu[k] > maopaopaixu[++k]) {
                    t = maopaopaixu[k];
                    maopaopaixu[k] = maopaopaixu[++k];  /*前一个比后一个大,于是交换*/
                    maopaopaixu[++k] = t;
                }

            }
            m--;
            z--;
        }  /*冒泡排序算法的过程*/
        MaxScore = maopaopaixu[4];
        MinScore = maopaopaixu[0];
        printf("%.1f\40", MaxScore);
        printf("%.1f\40", MinScore);
    }

    getchar();
    return 0;
}

img

让ChatGpt帮你检查了一下,回答如下
在检查代码之前,我想提醒您一些事项:

不要在主函数中使用gets()函数,它容易导致缓冲区溢出,应该使用fgets()函数代替。

确保数组的大小与程序中使用的大小匹配,否则会导致内存错误。

避免在for循环中使用全局变量。

变量命名应具有可读性,以便程序易于理解和维护。

下面是检查代码时发现的问题:

在第17行,应该将“gets(players_score)”更改为“scanf("%f", &players_score[i][j])”,以将输入的值存储到二维数组中。

在第34行,应该更改“++i”为“i + 1”,以避免在同一循环中使用两次自增运算符。

在第35行,应该使用fgets()函数代替gets()函数。

在第46行,应该将“int m”更改为“int m = 4”,以便在后续冒泡排序算法中使用。

在第49行,应该将“t = maopaopaixu[k]”更改为“t = maopaopaixu[l]”,以确保交换正确的两个变量。

在第51行,应该将“maopaopaixu[++k]”更改为“maopaopaixu[l + 1]”,以避免使用错误的索引。

在第54行,应该使用“%c”格式符号来打印字符,而不是使用“%s\40”。

在第56行,应该使用“%f”格式符号来打印浮点数,而不是使用“%d”。

在第59行,应该将“printf("%.1f\40", MinScore)”更改为“printf("%.1f\n", MinScore)”,以便在输出中换行。

在第61行,应该使用“return 0;”代替“getchar(); return 0;”,以避免程序等待用户按任意键。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/734398
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:百科不全书之我的常见报错和解决
  • 除此之外, 这篇博客: 结构体内存对齐中的 含有虚函数的类 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    class Test
    {
    public:
    	Test(){}
    	virtual void func(){}
    	virtual int* func1(){}
    	~Test(){}
    private:
    	char a;
    	int b;
    	double c;
    }
    

    我们只要知道,类的成员才是类的,内存对齐规则和结构体相同,有虚函数存在的,只是多了一个虚表指针,有了指针就和多少位的系统有关系了。


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

在你的代码基础上修改的,仅供参考!

img

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
    int players = 0; /* 选手的人数 */
    float sum = 0;   /* 每位选手成绩的分数总和 */

    int i, j, k, t; /* t为冒泡排序算法的中间变换参量 */
    int m = 5, z = 5;
    float MaxScore = 0, MinScore = 0; /* 每位参赛选手的评委评分的最高分数和最低分数 */
    float maopaopaixu[5] = {0};
    printf("Enter the number of players:\n");
    scanf("%d", &players); /* 输入参赛选手的人数 */

    if (players < 1)
        return -1;
    float players_score[players][5];
    /* 纪录参赛选手成绩的数组矩阵 */

    for (i = 0; i <= players - 1; i++)
    {                                      /* 输入每个参赛选手的成绩 */
        printf("now player %d\n", 1 + i); /*这里有问题已修改*/
        printf("please input score:\n");
        for (j = 0; j <= 4; j++)
        {
            //gets(players_score);
            /*这里有问题已修改*/
            scanf("%f", &players_score[i][j]);
        };
        printf("\n");
    };

    printf("%s\40", "player");
    char judgeMan[6] = "ABCDE";
    for (i = 0; i < 5; i++)
    {
        printf("judge%c\40", judgeMan[i]);
    }
    printf("total\40avervage\40MaxScore\40MinScore\n");
    for (i = 0; i <= players - 1; i++)
    { /* 输出每个参赛选手的成绩 */
        printf("player %d\40", 1 + i);
        for (j = 0; j <= 4; j++)
        {
            printf("%.1f\40", players_score[i][j]);
        };
        for (j = 0; j <= 4; j++)
        {
            sum = sum + players_score[i][j];
        }
        printf("%.1f\40", sum);        /* total值(总分) */
        printf("%.1f\40", sum / 5); /* average值(平均分) */
        sum = 0;
        j = 0;
        for (k = 0; k <= 4; k++)
        {
            maopaopaixu[k] = players_score[i][j];
            j++; /* 将players_score数组的其中一行数据列赋值给一个新数组,使其方便进行冒泡排序算法 */
        };

        int m1 = 5;
        for (int i = 0; i < m1; i++)
        {
            for (int j = 0; j < m1 - 1; j++)
            {
                if (maopaopaixu[j] > maopaopaixu[1 + j])
                {
                    t = maopaopaixu[j];
                    maopaopaixu[j] = maopaopaixu[1 + j]; /* 前一个比后一个大,于是交换 */
                    maopaopaixu[1 + j] = t;
                }
            }
            m1--;
        } /* 冒泡排序算法的过程 */

        MaxScore = maopaopaixu[4];
        MinScore = maopaopaixu[0];
        printf("%.1f\40", MaxScore);
        printf("%.1f\40", MinScore);
        puts("");
    }
    getchar();
    return 0;
}