2つのファイルを文字ごとに比較するプログラムを作成しています。各ファイルを比較する関数は、ファイルの状態に応じて値を返します。 、両方のファイルが一致した場合、両方のファイル-1、同じであるが、第一のファイルが第二の前に終了した場合-2、両方のファイルが一致するが、第2ファイルは、最初の前に終了し、正の整数が示す場合2つのファイルを文字ごとに比較するには
関数は0を返しますファイルが異なる文字。
#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
を2つ目は
ae
が含まれているそれは私に奇妙な戻り値を与え、ということである理由思っていましたそう?事前
「この奇妙なバグ」とは何か、そして「奇妙な戻り値」は何でしょうか。 – Marlon
すべての文字が一致する場合、ループから脱出するには、EOFで両方のファイルをテストするだけでは問題ありませんか? – grok12