我正在使用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);
}
可能是什么问题?
答案 0 :(得分:1)
当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
将会更快发生。
答案 1 :(得分:1)
请注意,流的内部位置指示器可能指向 下一个操作的文件结束,但仍然是文件结束 在操作尝试读取指示符之前,可能不会设置指示符 点。
while(fscanf(fp,"(%d,%d)\n",&a,&b) == 2){
printf("\nThe values are :%d %d\n",a,b);
}
会做的伎俩。
答案 2 :(得分:1)
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char **argv){
int a,b;
FILE *fp=fopen(argv[1],"r");
char linebuff[32];
while(fgets(linebuff, sizeof(linebuff), fp)){
sscanf(linebuff,"(%d,%d)",&a,&b);
printf("\nThe values are :%d %d\n",a,b);
}
fclose(fp);
}
答案 3 :(得分:1)
我认为你所需要的只是'\n'
这适用于我的代码,在您的示例输入上。
fscanf(fp,"(%d,%d)\n",&a,&b);
^
但请尝试使用sscanf
&amp; fgets
进行此类操作。