2014-01-27 26 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++; 
} 
相关问题