Другие языки программирования и технологии

C++ Файлы. помогите чем можете . за хороший ответ подарю денюжку

/* СРАВНИТЬ ФАЙЛЫ . Даны два текстовых файла. Определить совпадают ли компоненты первого файла с компонентами второго файла.
Если нет то получить номер строки и позицию символа в этой строке начиная с которого файлы отличаются между собой .
В случае когда один из файлов повторяет начало другого более длинного файла ответом должно быть соответсвующее сообщение
с указанием имени длинного файла и номера первой строки которая не входит в короткий файл. */
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable : 4996)
#include
#include
#include
#include
#include
int main()
{
FILE *f1,*f2;
char buff1[180], buff2[180];

if ((f1 = fopen("f1.txt", "r")) == NULL)
{
printf("Error opening file ");
exit(0); /* корректный выход из программы в
случае ошибки открытия файла first.txt*/
}
if ((f2 = fopen("f2.txt", "r")) == NULL)
{
printf("Error opening file ");
getchar();
return 0;

}

fscanf(f1, "% s",buff1);
fscanf(f2, "% s", buff2);

fclose (f1); //закрытие файлов.
fclose ( f2);
for (int i = 0;i < strlen(buff1);i++)
{
if (buff1[i] != buff2[i])
{
printf("%d",i);

}
}

getchar();
return 0;
}
не понимаю в чем ошибка.... нужна помощь
int main()
{
const int LEN = 180;
FILE *f1,*f2;
char buff1[LEN], buff2[LEN];

if ((f1 = fopen("/home/eugen/qtProjecte/testProject/test/f1.txt", "r")) == NULL)
{
printf("Error opening file ");
exit(0); /* корректный выход из программы в
случае ошибки открытия файла first.txt*/
}
if ((f2 = fopen("/home/eugen/qtProjecte/testProject/test/f2.txt", "r")) == NULL)
{
printf("Error opening file ");
getchar();
return 0;
}

int line = 0;
while( fgets(buff1,LEN,f1) && fgets(buff2,LEN,f2) ) {
++line;
if(strcmp(buff1,buff2) != 0)
{
printf("Line %d of f1.txt %s\n differs from line %d in file f2.txt %s\n", line, buff1,line,buff2);
int i = 0;
int len = min(strlen(buff1), strlen(buff2));
for(; i < len; i++)
{
if (buff1[i] != buff2[i])
{
printf("Files f1.txt and f2.txt are different at line %d on line position %d", line, i);
break;
}
}
}
}

if(strlen(buff1))
{
printf("additional content of f1.txt:\n\n");
do
{
printf("Line %d: %s", line++, buff1);
}
while(fgets(buff1,LEN,f1));
}

if(fgets(buff2,LEN,f2))
{
printf("additional content of f2.txt:\n\n");
do
{
printf("Line %d: %s", line++, buff2);
}
while(fgets(buff2,LEN,f2));
}

fclose (f1); //закрытие файлов.
fclose (f2);

getchar();
return 0;
}
Ivan Okunev
Ivan Okunev
816
Лучший ответ
Ivan Okunev Вывод программы...

Line 4 of f1.txt CONFIG -= qt

differs from line 4 in file f2.txt CONFIG -= qt4

Files f1.txt and f2.txt are different at line 4 on line position 12additional content of f1.txt:

Line 6: SOURCES += main.cpp
additional content of f2.txt:

Line 7: SOURCES2 += main.cpp
Line 8: SOURCES3 += main.cpp
Line 9: SOURCES4 += main.cpp
Line 10: SOURCES5 += main.cpp
Виталик Семелет Спасибо за ответ. я обещал денюжку . а труд должен быть вознагражден можно ваши реквизиты? и еще можете прокоментировать код?
Ivan Okunev Далее если вы хотите действительно дать за это денежку,
то дайте её не мне.

Найдите нуждающего человека, пенсионера или молодую семью, которым действительно эта денежка принесёт пользу.

Желаю Вам успехов!
for (int i = 0;i < strlen(buff1);i++)
if (buff1[i] != buff2[i])
{
printf("%d",i);
break ; // ********* Вот тут у тебя ошибка - нет выхода из цикла. Цикл не прерывается при нахождении несоответствия, а продолжает сравнивать дальше и выводить индексы несовпадающих элементов
}
А то что компилятор тебе пишет не судьба выложить?
Виталик Семелет вот это 188189190191200201202203208209210211