C语言牛牛的数,结构体练习题

问题遇到的现象和发生背景

牛客的结构体练习题

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
#include 
#include 
struct Book
{
    char str[100];
    float p;
};
int main(void)
{
    struct Book* parr;
    int n, i, j;
    struct Book t;
    scanf("%d", &n);
    parr = (struct Book*)malloc(n * sizeof(int));
    for (i = 0; i < n; i++)
    {
        scanf("%s", parr[i].str);
        scanf("%f", &parr[i].p);
    }
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - 1 - i; j++)
        {
            if (parr[j].p > parr[j + 1].p)
            {
                t = parr[j];
                parr[j] = parr[j + 1];
                parr[j + 1] = t;
            }
        }
    }
    for (i = 0; i < n; i++)
        printf("%s\n", parr[i].str);
    return 0;
}

运行结果及详细报错内容

img

img


它说我这个例子报错,但我用vs2022这个例子是可以写出来的,我不太清楚错误在哪里?

望采纳!!!点击回答右侧采纳即可!!!!我没有发现报错的地方。可能是粘贴的代码有点问题。

如果您在编译运行该代码时报错,可以尝试以下方法:

检查每一个符号是否使用正确,尤其注意结构体中的成员名字是否写错。
在输入 n 的值时,确保 n 是一个有效的数字。
在使用 malloc 函数时,注意按照结构体的大小申请内存。例如,parr = (struct Book*)malloc(n * sizeof(int)); 中,应该把 int 替换为 struct Book。
在编译时,检查是否有没有包含必要的头文件,例如 stdio.h 和 malloc.h。
如果在编译时提示找不到函数或符号的错误,可能是因为没有链接必要的库文件。可以尝试添加链接参数,例如 -lm。
如果仍然无法解决问题,可以尝试打印一些调试信息,帮助定位问题。例如,在代码中添加 printf 函数来打印变量的值,或者使用调试器来跟踪代码的执行流程。

你在使用malloc函数分配内存时出了问题。

这行代码:

parr = (struct Book*)malloc(n * sizeof(int));

你是想要分配n个struct Book的内存,但是你使用了sizeof(int)来计算内存大小,实际上应该使用sizeof(struct Book)。改成这样:

parr = (struct Book*)malloc(n * sizeof(struct Book));

这样就可以正常运行了。