c - 使用 fscanf 读取文件后无限循环

标签 c file

我正在使用 fscanf 读取输入

(2,3)

(3,4)

来自一个文件,但每当我运行该程序时它都会进入无限循环。输入来自文件 abc.txt ,该文件必须作为命令行参数传递。代码如下

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char **argv){

    int a,b;
    FILE *fp=fopen(argv[1],"r");

    while(!feof(fp)){
        fscanf(fp,"(%d,%d)",&a,&b);
        printf("\nThe values are :%d %d\n",a,b);
    }
    
    fclose(fp);

}

可能是什么问题?

最佳答案

fscanf 没有找到您想要读取的数据时,它不会推进读取位置,因此永远不会到达 EOF。检查 fscanf 是否返回两个数字,如果没有则中断:

while(!feof(fp)){
    if (fscanf(fp,"(%d,%d)",&a,&b) != 2) {
        break;
    }
    printf("\nThe values are :%d %d\n",a,b);
}

您可以完全放弃 feof 检查,因为 break 会更快发生。

关于c - 使用 fscanf 读取文件后无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17921514/

相关文章:

php - 在 PHP 中调用 LLVM-GCC

c - Linux POSIX C LibPCRE `double free or corruption (fasttop)` 崩溃

c# - 在 C# 中,如何检查路径是否为虚拟路径?

python - 退格键似乎在 python 中不起作用

linux - 写入文件的数据究竟何时可供读取?

c++ - 套接字错误的好资源?

c - 真实数据序列上的 FFTW

c - 由于变量取值范围较大,导致简单 C 代码中出现段错误(核心转储)

file - 使用 Powershell 获取列在 "Details"选项卡中的属性

node.js - 如何使用 Restify 提供静态文件