因此,我必须编写一个c程序,读取一个文本文件,将其存储在一个具有额外值(平均值)的结构中,并将带有fread的结构输出到一个新的结构中。然而,这些信息并没有传递到任何地方。我几乎是积极的,它的Maloc不知道如何分配适当的内存量(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, "%d\n", &(current.id));
        for (i = 0; i < 6; i++){
            sscanf (input, "%lf", &(current.marks[i]));
            sum += current.marks[i];
        }
        current.gpa = sum / 6;
        fwrite (&current, sizeof (Student), 1, bin);

//  }
    fclose(inFile);
    Student newer;
    fseek (bin, 0, SEEK_SET);
    fread (&newer, 1, sizeof(Student), bin);
    fclose(bin);
    printf( "%d, %.1lf\n", newer.id, newer.marks[0]);
}

所以输入文件是
122456 1.0 2.0 3.0 4.0 5.0 6.0
结果是
122456,0.0个
有人能帮我一下吗?我环顾四周,却找不到适合我的东西。
第一个帖子,所以请友好!

最佳答案

这里的问题很可能是由于undefined behavior:结构成员marksfloat的数组,但是您尝试使用"%lf"格式解析文本文件中的值,该格式需要指向double的指针。指向Afloat的指针与指向Adouble的指针不同。
sscanf格式更改为"%f"格式,它应该工作得更好。
我建议您阅读this scanf (and family) reference,它有一个很好的表格,列出了不同的格式和它们期望的参数。

关于c - 在C中使用struct的Malloc,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22988939/

10-12 17:16