所以我必须做一个c程序,读取一个文本文件,用一个额外的值(平均值)将其存储在一个结构中,并用fread将该结构输出到一个新的结构中。然而,这些信息没有任何进展。我几乎肯定它的malloc不知道如何分配适当的内存量(C++和Java有点宠坏了我)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student {
int id;
float marks [10];
float gpa;
} Student;
int main (){
FILE *inFile, *bin;
int i, sum, sLength;
char input[45];
char newLine;
inFile = fopen ("Assign6.dat","r");
bin = fopen ("Assign6out.dat","wb+");
Student current;
// while (!feof(inFile)){
sum = 0;
fgets (input,sizeof(input), inFile);
sLength = strlen(input);
sscanf (input, "%dn", &(current.id));
for (i = 0; i < 6; i++){
sscanf (input, "%lf", &(current.marks[i]));
sum += current.marks[i];
}
current.gpa = sum / 6;
fwrite (¤t, sizeof (Student), 1, bin);
// }
fclose(inFile);
Student newer;
fseek (bin, 0, SEEK_SET);
fread (&newer, 1, sizeof(Student), bin);
fclose(bin);
printf( "%d, %.1lfn", newer.id, newer.marks[0]);
}
所以输入文件就是这个
122456 1.0 2.0 3.0 4.0 5.0 6.0
输出为
122456,0.0
有人能帮我吗?我环顾四周,但找不到任何适合我的东西。
第一帖,所以请友善!
这里的问题很可能是由于未定义的行为:结构成员marks
是float
的数组,但您尝试使用格式"%lf"
解析文本文件中的值,该格式需要指向double
的指针。指向float
的指针与指向double
的指针不同。
将sscanf
格式更改为"%f"
,它应该会更好地工作。
我建议您阅读这篇scanf
(和系列)参考资料,它有一个很好的表格,列出了不同的格式和他们期望的参数。