Что тут вообще написано?
Сначала txt1 - это FILE*. Потом зачем-то txt1=fgets(sim1), то есть в переменную типа FILE* присваивается что? Советую посмотреть описание fgets в документации:
char *fgets(char *s, int size, FILE *stream);
Присваивается char*. А откуда, из какого файла?
Думаю, имелось в виду:
sim1=fgetc(txt1);
Тогда это имеет какой-то смысл.
Далее, while по txt1 && txt2 не имеет смысла - указатели будут ненулевыми даже когда будет достигнут конец файлов. Правильнее обернуть в такой цикл:
while(!feof(txt1) && !feof(txt2)) { ... }
В конце проверить, что feof(txt1) && feof(txt2), иначе один из файлов закончился, а второй нет - размеры не совпадают, файлы отличаются.
А более правильно делать блочное чтение, с помощью fread и memcmp, это гораздо эффективнее по скорости (да, конечно, для мелких файлов разница незаметна, но всё же):
int isequal=1;
while(!feof(txt1) && !feof(txt2)) {
char buf1[1024];
char buf2[1024];
int readsize1 = fread(buf1, 1, 1024, txt1);
int readsize2 = fread(buf2, 1, 1024, txt2);
if (readsize1 != readsize2) {
isequal=0;
break;
} else {
if (memcmp(buf1, buf2, readsize1)) {
isequal=0;
break;
}
}
if(isequal) {
// одинаковы
} else {
// отличаются
}