假设有一个名为' input'的文件。看起来像这样:
Joyle Hughes 5 6 7 6 9 10
Marc Gasol 3 9 10 8
Yuki Yamamoto 5 10 10 10 10 10
Milan Francis 4 9 9 9 8
第一列存储名称,第二列存储名称,第三列存储有关学生已完成测试的数据,以及后面的数字是他们在每一项上获得的成绩。
我们还有一个结构'学生'定义如下:
struct Student {
char name[20];
char surname[20];
int nr;
int arr[50];
};
我的任务是将文件中的所有数据存储到struct Student数组中,并计算每个学生的平均成绩。 我遇到的麻烦实际上是将等级存储在一个int数组中。这是我尝试的方式:
#include<stdlib.h>
#include <stdio.h>
int main()
{
struct Student a[1000];
int len= function(a,1000);
int i,j;
int sums[1000]= {0};
for(i=0; i<len; i++) {
for(j=0; j<a[i].nr; i++)
sums[i]+=a[i].arr[j];
}
float avg[1000];
for(i=0; i<len; i++) {
avg[i]=(float)suma[i]/a[i].nr;
}
FILE *fout=fopen("output.txt","w");
int k;
for(k=0; k<len; k++)
fprintf(fout,"%15s %15s %f\n",a[i].name,a[i].surname,avg[i]);
fclose(fout);
return 0;
}
int function(struct Student *s,int len)
{
FILE *fp;
fp=fopen("input.txt","r");
if(fp==NULL)
exit(1);
int i=0;
while((fscanf(fp,"%7s%12s%8d",s[i].name,s[i].surname,&s[i].nr))==3) {
int k;
for(k=0; k<s[i].nr; k++) {
fscanf(fp,"%2d",&s[i].arr[k]);
}
i++;
}
fclose(fp);
return i;
}
当我尝试打印平均成绩时,我看到的是0.0000的值,我想这是由于我用来存储数据的循环中的错误。
答案 0 :(得分:0)
您有几个错误:
您不包含任何头文件,这会导致编译器假定所有标准库函数都返回int
,因此它们无法按预期工作。在您的情况下,最糟糕的是fopen()
。
您在function()
中致电main()
,但未提供声明。
vel
未声明,我认为是因为您没有将编辑器中的代码复制并粘贴到您的问题中。
您使用变量j
进行迭代并在此处增加i
1
for(j=0; j<a[i].nr; i++)
您使用变量k
进行迭代,并在循环体 1 中使用i
int k;
for(k=0; k<vel; k++)
fprintf(fout,"%15s %15s %f\n",a[i].name,a[i].surname,avg[i]);
这是您修复的代码以便正常工作
#include <stdio.h>
#include <stdlib.h>
struct Student {
char name[20];
char surname[20];
int nr;
int arr[50];
};
int function(struct Student *s,int len);
int main()
{
struct Student a[1000];
int i;
int sums[1000] = {0};
int len;
float avg[1000];
FILE *fout;
len = function(a, 1000);
for (i = 0 ; i < len ; i++)
{
int j;
for (j = 0 ; j < a[i].nr ; j++)
sums[i] += a[i].arr[j];
}
for (i = 0 ; i < len ; i++)
avg[i] = (float)sums[i] / a[i].nr;
fout = fopen("output.txt","w");
if (fout == NULL)
return -1;
for (i = 0 ; i < len ; i++)
fprintf(fout,"%15s %15s %f\n", a[i].name, a[i].surname, avg[i]);
fclose(fout);
return 0;
}
int function(struct Student *s,int len)
{
FILE *fp;
int i;
i = 0;
fp = fopen("input.txt", "r");
if (fp == NULL)
exit(1);
while ((fscanf(fp, "%19s%19s%d", s[i].name, s[i].surname, &s[i].nr)) == 3)
{
int k;
k = 0;
while ((k < s[i].nr) && (fscanf(fp, "%2d", &s[i].arr[k]) == 1))
k += 1;
i++;
}
fclose(fp);
return i;
}
1 复制和粘贴代码时要小心。