[英]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.