我正在寫的字比較兩個文件字符的程序。比較每個文件的函數返回一個取決於文件條件的值。我如何比較兩個文件逐個字符
函數返回0時這兩個文件是相同的,-1,如果兩個文件匹配,但在第二之前的第一個文件結束時,如果-2這兩個文件相匹配,而是在第一第二文件結束,並且指示正INT這些文件在不同的字符處。
#include <stdio.h>
#include <string.h>
#define CMP_EQUAL 0
#define CMP_EOF_FIRST -1
#define CMP_EOF_SECOND -2
int char_cmp(FILE *fp1, FILE *fp2);
int main(void)
{
FILE *fp1;
FILE *fp2;
fp1 = fopen("input1.txt", "rb+");
fp2 = fopen("input2.txt", "rb+");
switch(char_cmp(fp1, fp2))
{
case CMP_EQUAL:
printf("The Files are equal");
break;
case CMP_EOF_FIRST:
printf("EOF on a.txt");
break;
case CMP_EOF_SECOND:
printf("EOF on t.txt");
break;
default:
printf("files differ: char %d\n", char_cmp(fp1, fp2));
break;
}
if(fclose(fp1) != 0)
{
perror("fclose");
/*other error handling*/
}
if(fclose(fp2) != 0)
{
perror("fclose");
/*other error handling*/
}
return 0;
}
int char_cmp(FILE *fp1, FILE *fp2)
{
int c, d;
size_t byte = 0;
int same = 1;
do
{
byte++;
}while((c = fgetc(fp1)) == (d = fgetc(fp2)));
if(c == EOF && d != EOF)
{
return CMP_EOF_FIRST;
}
if(d == EOF && c != EOF)
{
return CMP_EOF_SECOND;
}
if(c != d)
{
return byte;
}
return CMP_EQUAL;
}
我想知道如何在檢查每個文件中的所有字符是否匹配後再跳出do循環。因爲當我嘗試過時,它打破了它發現一個相同的角色並且不檢查其餘部分的時刻。
而且我已經encourtered這個奇怪的錯誤,如果一個文件包含其中:
dee
和第二個包含
ae
它給了我一個奇怪的返回值,並想知道這是爲什麼所以?
感謝您的幫助提前
您應該更清楚「這個奇怪的錯誤」是什麼以及「奇怪的返回值」是什麼。 – Marlon
如果所有字符都匹配,那麼跳出循環不能僅僅測試EOF中的兩個文件? – grok12