[英]Working with two files in C
我正在读取一个名为“ 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
并检查它是否为0
(找不到任何内容)或EOF
(结束)。
类似功能fscanf()
返回等各种值EOF
(文件或错误的端部)或匹配符的数量, 0
, 1
,...
无需停止测试一个值代码,而是针对所有不需要的值进行测试。
// while(fscanf(fp1,"%d",&n) != EOF){
while(fscanf(fp1,"%d",&n) == 1){
nr=0;
// while(fscanf(fp2,"%d",&m) != EOF){
while(fscanf(fp2,"%d",&m) == 1){
@威廉·珀塞尔很好地解释了
在输入中的某些时候,fscanf的格式不匹配,因此fscanf返回0,但不前进文件指针。 因此,它始终从同一位置读取数据,并且每次返回0。
无限循环。
尝试使用fseek函数在输出文件中移动流指针。
while(fscanf(fp1,"%d",&n) != EOF){
fseek ( fp2, 0 , SEEK_SET );
bool flag = false;
while(fscanf_s(fp2,"%d",&m) != EOF){
printf("%d %d ",m,n);
if(n == m)
{
printf("%d = %d ", m, n);
flag = true;
break;
}
}
if(!flag)
{
fseek ( fp2, 0 , SEEK_END );
fprintf(fp2,"%d ",n);
}
}
编辑
另一种方法是将写入的值存储在数组中。 为此,您可以使用向量。
vector<int> vData;
while(fscanf(fp1,"%d",&n) != EOF){
bool flag = false;
for(int i = 0; i < vData.size(); i++)
{
if(vData[i] == n)
{
flag = true;
break;
}
}
if(!flag)
{
vData.push(n);
fprintf(fp2,"%d ",n);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.