fscanf函数不读取c

时间:2015-05-08 14:06:41

标签: c file-io scanf

我试图从文件中读取一些数据并将其插入队列,插入函数运行良好,我试图用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);}

2 个答案:

答案 0 :(得分:1)

while (fscanf(fp,"%d %d", natid, cond) != EOF)

应该是

while (fscanf(fp,"%d %d", &natid, &cond) == 2)

您需要传递natidcond的地址而不是其值,因为%d中的fscanf需要int*,而不是int {1}}。我使用了== 2,以便在EOF或无效数据(如字符)的情况下循环中断。否则,如果文件包含无效数据,则循环将变为无限循环,因为%d将无法扫描整数。

<小时/> 您还应该检查fopen是否成功。 fopen失败了NULL

答案 1 :(得分:1)

您必须将指针传递给fscanf()存储值的位置,并检查所有预期的转化是否成功:

while (fscanf(fp, "%d %d", &natid, &cond) == 2)