将文件内容导入C中的结构

时间:2014-03-21 20:20:36

标签: c file struct linked-list

这是我正在制作的一个简单函数,用于学习如何将文件中的数据复制到结构中。

#include <stdio.h>
#include <stdlib.h>
#define FILENAME "studentlist.txt"

struct node {
    char *name[20];
    int age;
    struct node *next;
};

typedef struct node Node;

int main(){

    Node *p,*head = malloc(sizeof(Node));
    Node **listPtr;
    *listPtr = head;
    p = head;
    int num;

    FILE *students;
    if ((students = fopen(FILENAME,"r")) == NULL)
            printf("Error: Cant open file\n");
    else
    {
            num = fscanf("%i", &num);
            int i = 0;
            for (i = 0; i <= num; i++){
                    fscanf(students,"%s %i", p->name, p->age);
                    p = p->next;
                    p = malloc(sizeof(Node));
                    }

return 0;
}

我得到的错误与fscanf函数有关。我也得到了

 expected 'struct FILE * __restrict__' but argument is of type 'char *'

我做错了什么?

2 个答案:

答案 0 :(得分:2)

你刚忘了行中的FILE*

num = fscanf("%i", &num );

那应该是

num = fscanf( students, "%i", &num );

你应该阅读整个错误。它会告诉您哪一行以及可能出现问题的字符。他们告诉你问题,这是解决问题的90%。

答案 1 :(得分:1)

标准库函数fscanf的签名是

int fscanf(FILE *stream, const char *format, ...);

因此,以下陈述是错误的 -

num = fscanf("%i", &num);

格式字符串文字"%i"计算指向其第一个元素的指针,该元素的类型为char *。但是,fscanf期望第一个类型为FILE *的参数。这解释了错误陈述。用 -

替换此行
num = fscanf(students, "%i", &num);