Я пишу программу, которая сравнивает два файла символ за символом.Функция сравнения каждого файла возвращает значение, зависящее от состояния файлов.
функция возвращает 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 после проверки, есливсе символы совпадают в каждом файле.Потому что, когда я попробовал, он прерывает момент, когда находит тот же символ и не проверяет остальное.
Также я обнаружил эту странную ошибку, где, если один файл содержит:
dee
, а второй содержит
ae
, он дает мне странное возвращаемое значение и удивляется, почему это так?
спасибо за любую помощь заранее