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);
}