牛客的结构体练习题
#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;
}
望采纳!!!点击回答右侧采纳即可!!!!我没有发现报错的地方。可能是粘贴的代码有点问题。
如果您在编译运行该代码时报错,可以尝试以下方法:
检查每一个符号是否使用正确,尤其注意结构体中的成员名字是否写错。
在输入 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));
这样就可以正常运行了。