首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数不读取c语言

函数不读取c语言
EN

Stack Overflow用户
提问于 2015-05-08 14:06:40
回答 2查看 74关注 0票数 0

我尝试从文件中读取一些数据并将其插入到队列中,插入函数运行良好,并试图用printfs捕获错误。我在时间()行中看到了错误。这样的文件格式中的数据

12345 2

11232 4

22311 4

22231 2

代码语言:javascript
运行
复制
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);}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-08 14:08:51

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

代码语言:javascript
运行
复制
while (fscanf(fp, "%d %d", &natid, &cond) == 2)
票数 1
EN

Stack Overflow用户

发布于 2015-05-08 14:08:26

代码语言:javascript
运行
复制
while (fscanf(fp,"%d %d", natid, cond) != EOF)

应该是

代码语言:javascript
运行
复制
while (fscanf(fp,"%d %d", &natid, &cond) == 2)

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

您还应该检查fopen是否成功。fopen在失败时返回NULL

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30125846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档