这是一个简单的函数,我是为了学习如何将数据从文件复制到结构体。
#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 filen");
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 *'
我做错了什么?
您刚刚忘记了行中的FILE*
。
num = fscanf("%i", &num );
应该是
num = fscanf( students, "%i", &num );
你应该阅读整个错误。它告诉你哪一行,可能是哪个角色给你出了问题。他们告诉你问题所在,已经解决了90%的问题。
标准库函数fscanf
的签名为
int fscanf(FILE *stream, const char *format, ...);
因此,下面的语句是错误的-
num = fscanf("%i", &num);
格式字符串字面值"%i"
的计算结果是指向其第一个元素的指针,该元素的类型为char *
。但是,fscanf
需要FILE *
类型的第一个参数。这解释了错误语句。将这一行替换为-
num = fscanf(students, "%i", &num);