我试图从文件中读取一些数据并将其插入队列,插入函数运行良好,我试图用printfs捕获错误。我在while()行看到了错误。文件中的数据形式如此
12345 2
11232 4
22311 4
22231 2
void read_file(struct Queue *head){
FILE *fp;
int natid;
int cond;
fp=fopen("patients.txt","r");
while (fscanf(fp,"%d %d", natid, cond) != EOF)
insert(head,natid,cond);
fclose(fp);}
答案 0 :(得分:1)
while (fscanf(fp,"%d %d", natid, cond) != EOF)
应该是
while (fscanf(fp,"%d %d", &natid, &cond) == 2)
您需要传递natid
和cond
的地址而不是其值,因为%d
中的fscanf
需要int*
,而不是int
{1}}。我使用了== 2
,以便在EOF
或无效数据(如字符)的情况下循环中断。否则,如果文件包含无效数据,则循环将变为无限循环,因为%d
将无法扫描整数。
fopen
是否成功。 fopen
失败了NULL
。
答案 1 :(得分:1)
您必须将指针传递给fscanf()
存储值的位置,并检查所有预期的转化是否成功:
while (fscanf(fp, "%d %d", &natid, &cond) == 2)