【发布时间】:2015-02-17 22:21:19
【问题描述】:
假设有一个名为“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
第一列存储姓名,第二列存储姓氏,第三列存储有关学生参加了多少次测试的数据,后面的数字是他们在每个测试中获得的成绩。
我们还定义了一个结构体“Student”,如下所示:
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 的值,我猜这是由于我用来存储数据的循环中的错误。
【问题讨论】:
-
我忘记了是否需要在
fscanf()格式字符串之间包含空格。我会先检查一下。另外,你为什么在你的循环中使用%2d?不应该只是%d吗? -
你应该把剩下的代码贴出来,贴出来的代码没有可以帮助识别问题的信息。
-
@JonathanWood 不,空格不是问题,我认为不是。
-
@EmirShemafied 你包含了哪些标题?
vel声明在哪里? -
次要:使用
"%19s%19s%d",而不是"%7s%12s%8d"。name和surname是 20,不需要限制nr的输入宽度。
标签: c