【发布时间】:2016-09-27 08:14:21
【问题描述】:
我正在阅读一个名为“text.txt”的文件,其中包含一系列数字,中间有一个空格。我想在一个名为“text_nr.txt”的新文件中写入“text.txt”中的所有数字,但不重复!我的代码在第二个 while 循环中无限循环运行,但我不明白为什么。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n=0,m=0,nr;
FILE *fp1;
FILE *fp2;
fp1 = fopen("text.txt","r");
fp2 = fopen("text_nr.txt","a+");
while(fscanf(fp1,"%d",&n) != EOF){
nr=0;
while(fscanf(fp2,"%d",&m) != EOF){
printf("%d %d ",m,n);
if(n != m) continue;
else{
nr++;
break;
}
}
if(nr == 0){
fprintf(fp2,"%d ",n);
}
}
fclose(fp1);
fclose(fp2);
return 0;
}
【问题讨论】:
-
在输入中的某个时刻,fscanf 的格式不匹配,因此 fscanf 返回 0 但不推进文件指针。所以它一直从同一个位置读取,每次都返回 0。
-
考虑使用调试器。好有趣! :-)
-
@WilliamPursell 它在第一次开始运行时会这样做。我刚刚开始处理文件,我不知道为什么会这样。你能再解释一下,以便我理解并解决这个问题吗?
-
我对这些类型问题的一般处理方法是永远不要使用 scanf,所以我不是帮助的人! IMO,
scanf很复杂,如果您使用fread和strtol代替,您将了解更多。 -
@WilliamPursell 谢谢,我会尝试另一种方法!