C 我不知道';我不明白为什么人不兼容类型?我需要做什么来编译它?

C 我不知道';我不明白为什么人不兼容类型?我需要做什么来编译它?,c,compiler-errors,allocation,C,Compiler Errors,Allocation,我在这里不知所措,我不明白为什么s=(struct Person*)malloc(sizeof(struct Person)*n)不起作用?此任务是在data.txt文件中查找BMI。其中只包含这个 3 皮卡丘50 37 哥斯拉1000 霍姆斯178 67 并将其输出到BMI.txt文件中。具有分配内存块的要求。提前谢谢 #包括 #包括 #包括 #定义学生3 结构人{ 浮子质量、高度; 浮动体重指数; int计数,num; 字符名[99]; }; typedef结构人; int main()

我在这里不知所措,我不明白为什么
s=(struct Person*)malloc(sizeof(struct Person)*n)不起作用?此任务是在data.txt文件中查找BMI。其中只包含这个

3
皮卡丘50 37
哥斯拉1000
霍姆斯178 67

并将其输出到BMI.txt文件中。具有分配内存块的要求。提前谢谢

#包括
#包括
#包括
#定义学生3
结构人{
浮子质量、高度;
浮动体重指数;
int计数,num;
字符名[99];
};
typedef结构人;
int main()
{
int i;
文件*输入,*输出;
in=fopen(“data.txt”,“r”);
if(in==NULL){
printf(“打开文件失败!\n”);
出口(1);
}
out=fopen(“bmi.txt”,“w”);
结构人s[学生];
s=(结构人*)malloc(结构人的规模)*i;
对于(i=0;i<3;i++){
fscanf(“%s”,&s[i].name);
fscanf(“%lf”,&s[i].高度);
fscanf(“%lf”,&s[i].重量);
bmi=质量/(功率(身高,2));
fprintf(输出,“%s%3.2f\n”,名称,bmi);
}
免费的;
}
fclose(in);
fclose(out);
}
这个

不仅是错误的,而且是不必要的,
s
已经是一个
struct Person
数组,因此您无法为其赋值,并且不需要为其分配
malloc()
空间

也许你需要这个

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define STUDENT 3

struct Person {
    int     mass, height;
    int     bmi;
    int     count, num;
    char    name[99];
};

typedef struct Person Person;

int main()
{
    int            i;
    int            n;
    struct Person *s;
    FILE          *in;
    FILE          *out;

    in = fopen("data.txt", "r");
    if (in == NULL) {
        printf("failed to open file!\n");
        exit(1);
    }
    out = fopen("bmi.txt", "w");
    if (out == NULL) {
        printf("failed to open file!\n");
        fclose(in);
        exit(1);
    }
    n = 3;
    s = malloc(sizeof(struct Person) * n);
    if (s == NULL) {
        printf("failed to open file!\n");
        fclose(in);
        fclose(out);
        exit(1);
    }

    for (i = 0; i < n; i++) {
        fscanf("%s", s[i].name);
        fscanf("%d", &s[i].height);
        fscanf("%d", &s[i].mass);

        bmi = mass / (pow(height, 2));

        fprintf(out, "%s%d\n", name, bmi);
    }
    free(s);
    fclose(in);
    fclose(out);
}
#包括
#包括
#包括
#定义学生3
结构人{
int质量,高度;
体重指数;
int计数,num;
字符名[99];
};
typedef结构人;
int main()
{
int i;
int n;
结构人;
文件*in;
归档;
in=fopen(“data.txt”,“r”);
if(in==NULL){
printf(“打开文件失败!\n”);
出口(1);
}
out=fopen(“bmi.txt”,“w”);
if(out==NULL){
printf(“打开文件失败!\n”);
fclose(in);
出口(1);
}
n=3;
s=malloc(结构人的尺寸)*n;
如果(s==NULL){
printf(“打开文件失败!\n”);
fclose(in);
fclose(out);
出口(1);
}
对于(i=0;i

而且不需要从
void*
强制转换为任何其他指针类型,因此不要强制转换
malloc()

s
是一个数组,而不是指针。所以当你写
struct Person s[STUDENT]您已经为阵列分配了内存。如果要动态分配,需要将
s
声明为指针
struct Person*s谢谢你的帮助,我已经解决了这个问题,并且编译得很顺利@Jxh您不应该在自己的问题之外编辑有问题的代码,否则其他人将很难从您的错误中吸取教训。。另外,请不要编辑会使答案无效的更改,或者如果确实有必要,请在问题本身中明确说明。现在,您编辑的问题不再有效。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define STUDENT 3

struct Person {
    int     mass, height;
    int     bmi;
    int     count, num;
    char    name[99];
};

typedef struct Person Person;

int main()
{
    int            i;
    int            n;
    struct Person *s;
    FILE          *in;
    FILE          *out;

    in = fopen("data.txt", "r");
    if (in == NULL) {
        printf("failed to open file!\n");
        exit(1);
    }
    out = fopen("bmi.txt", "w");
    if (out == NULL) {
        printf("failed to open file!\n");
        fclose(in);
        exit(1);
    }
    n = 3;
    s = malloc(sizeof(struct Person) * n);
    if (s == NULL) {
        printf("failed to open file!\n");
        fclose(in);
        fclose(out);
        exit(1);
    }

    for (i = 0; i < n; i++) {
        fscanf("%s", s[i].name);
        fscanf("%d", &s[i].height);
        fscanf("%d", &s[i].mass);

        bmi = mass / (pow(height, 2));

        fprintf(out, "%s%d\n", name, bmi);
    }
    free(s);
    fclose(in);
    fclose(out);
}