2016-06-30 62 views
1

我有兩個文本文件test1.txt和test2.txt。他們每個人都有多個字符串。我想比較它們並打印它們是否相同或不同。 我的代碼如下:比較來自不同文本文件的字符串c

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main(){ 
char temp[100]; 

char const *t1; 
char const *t2; 

FILE *fp1=fopen("test1.txt","r"); 
while((t1=fgets(temp,sizeof(temp),fp1))!=NULL){ 
    FILE *fp2=fopen("test2.txt","r"); 
    while((t2=fgets(temp,sizeof(temp),fp2))!=NULL){ 
      if(strcmp(t1,t2)==0){ 
      printf("same\n"); 
      } 
      else{ 
      printf("Differ\n"); 
      } 
      } 
    fclose(fp2); 
    } 
fclose(fp1); 
} 

和文本文件test1.txt的:

100100001 
1111 

的test2.txt:

10101001 
1001 

上面提到的代碼提供了以下的輸出:

same 
same 
same 
same 

這顯然是錯誤的!

我在這裏做錯了什麼?如何解決它?

UPDATE

予固定的代碼。下面的代碼工作正常,但請讓我知道,如果一個更好的解決方案存在:

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main(){ 
char temp1[100]; 
char temp2[100]; 

char const *t1; 
char const *t2; 

FILE *fp1=fopen("test1.txt","r"); 
while((t1=fgets(temp1,sizeof(temp1),fp1))!=NULL){ 
    FILE *fp2=fopen("test2.txt","r"); 
    while((t2=fgets(temp2,sizeof(temp2),fp2))!=NULL){ 
      if(strcmp(t1,t2)==0){ 
      printf("same\n"); 
      } 
      else{ 
      printf("Differ\n"); 
      } 
      } 
    fclose(fp2); 
    } 
fclose(fp1); 
} 
+0

您從f1讀取一行到temp。然後你從f2讀入一行到temp。然後你檢查temp和temp是否包含相同的字符串,這顯然是因爲它們是同一個變量。 – immibis

+0

是的,我剛剛意識到它並更改了代碼(更新)。 – husna

回答

1

試試這個:

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

int main() 
{ 
     char temp[100]; 

     char t1[100]; 
     char t2[100]; 

     FILE *fp1=fopen("test1.txt","r"); 
     FILE *fp2=fopen("test2.txt","r"); 

     while((fgets(t1,100,fp1)!= NULL) && (fgets(t2,100,fp2)!= NULL)) 
     { 

       if(strcmp(t1, t2) == 0) 
       { 
         printf("same\n"); 
       } 
       else 
       { 
         printf("NOT same\n"); 
       } 
     } 

} 
+0

fgets(t1,1000,fp1),爲什麼1000比100. – denis

+0

謝謝你的建議! –

+0

未使用變量char temp [100]。此外,最好使用sizeof(t1)而不是100作爲常量。 – Beka

0

不要使用T1在while循環 當F1不等於空,然後複製f1中的第一個字符串爲temp1 類似地,當f2.txt不等於null,則將f2中的第一個字符串cipy到temp2 現在使用strcmp(temp1,temp2)比較字符串temp1和temp2 直到f1.txt或f2.txt等於零

+0

請詳細說明您的答案。這有助於其他人遇到同樣的問題。 –

+0

http://stackoverflow.com/a/38114757/6529466 –

+0

我的概念與上面提到的代碼鏈接相同 –

相關問題