这是我正在制作的一个简单函数,用于学习如何将文件中的数据复制到结构中。
#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 *'
我做错了什么?
答案 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);