2014-01-27 27 views
1

使用以下代碼,我可以比較兩個文件並找到它們的起始位置不同,但現在想要找到所有不同的位置並打印出來,而不僅僅是第一個地方。我知道這是一個循環,但我不知道如何做循環。我認爲離開while循環的原因是,將break語句取出,但它不起作用。 我怎麼稱呼它:查找兩個文件不同的所有字節位置

  if ((fp1 != NULL) && (fp2 != NULL)){ 
       compare_two_binary_files(fp1, fp2); 
       } 

它是如何實現的:

void compare(FILE *f1, FILE *f2) 
{ 
    char ch1, ch2; 
    int flag = 0; 

while (((ch1 = fgetc(f1)) != EOF) &&((ch2 = fgetc(f2)) != EOF)){ 
    if (ch1 == ch2) 
    { 
     flag = 1; 
     continue; 
    } 
    /* 
    * If not equal then returns the byte position 
    */ 
    else 
    { 
     fseek(f1, -1, SEEK_CUR); 
     flag = 0; 
     printf("Byte pos where two files differ is %d\n", ftell(f1)+1); 
    break; 
    } 
} 

}

+0

爲什麼是標誌變量有?當你刪除中斷並試圖獲得什麼輸出? – const

+0

'break'結束你的while循環。去掉它。你也不需要'continue'語句。使用'fseek(-1)'和'ftell()+ 1'似乎是不必要的複雜性。 –

回答

0

嘗試

int count = 0; 
while (((ch1 = fgetc(f1)) != EOF) &&((ch2 = fgetc(f2)) != EOF)){ 
    if (ch1 != ch2) 
    { 
     printf("Byte pos where two files differ is %d\n", count); 
    } 
    count++; 
} 
相關問題