Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
Almaz_KG
6 / 6 / 0
Регистрация: 15.05.2012
Сообщений: 105
#1

Побайтное сравнение двух файлов - C++

20.05.2012, 23:19. Просмотров 2315. Ответов 7
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <locale.h>
#include <stdio.h>
#include <conio.h>
 
int main(int argc, char *args[])
{
    setlocale(LC_ALL, "rus");
 
    int counter  = 0;
    FILE *file1, *file2;
 
    if (argc == 3)
    {
        if ((file1 = fopen(args[1], "rb")) != NULL)
        {
            if ((file2 = fopen(args[2], "rb")) != NULL)
            {
                bool ch1, ch2;
                do
                {
                    ch1 = getc(file1);
                    ch2 = getc(file2);
                    if (ch1 != ch2)
                    {
                        counter++;
                        printf("Файлы не идентичны!!!\nНомер байта в котором они расходятся %i", counter);
                    }
                }
                while(ch1 != EOF);
                if (counter == 0)
                    printf("Два файла полностью идентичны");
            }
            else
                printf("Не удается открыть второй файл!");
        }
        else
            printf("Не удается открыть первый файл!");
    }
    else
        printf("Вы не ввели пути к файлам!");
 
    _getch();
}
Помогите найти ошибку - логическую. Программа не выдает ответ.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1744 / 1087 / 71
Регистрация: 13.09.2011
Сообщений: 3,113
20.05.2012, 23:38     Побайтное сравнение двух файлов #2
Цитата Сообщение от Almaz_KG Посмотреть сообщение
C++
1
2
3
4
bool ch1, ch2;
...
ch1 = getc(file1);
ch2 = getc(file2);
int же
Almaz_KG
6 / 6 / 0
Регистрация: 15.05.2012
Сообщений: 105
20.05.2012, 23:48  [ТС]     Побайтное сравнение двух файлов #3
Спасибо=))

Я просто исходил из того, что 0-1 - это булевские значения=))
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
21.05.2012, 00:52     Побайтное сравнение двух файлов #4
Байт это восемь бит. Булевый тип в C++ = int.
Си, такой Си.
И потом, это бит есть либо нуль, либо единица. Байт может принимать значения от 0 до 255.
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
21.05.2012, 01:04     Побайтное сравнение двух файлов #5
Цитата Сообщение от Almaz_KG Посмотреть сообщение
while(ch1 != EOF);
А если файл ch2 будет короче ch1?
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
21.05.2012, 01:07     Побайтное сравнение двух файлов #6
Тогда EOF будет на равен какому-то другому байту и сработает counter++.
Так что программа более менее корректно сработает в этом случае.
KeyGen
383 / 290 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
21.05.2012, 01:23     Побайтное сравнение двух файлов #7
AnyOne697, Совсем не обязательно. Это чревато ошибкой.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2012, 01:29     Побайтное сравнение двух файлов
Еще ссылки по теме:

Сравнение двух массивов C++
C++ Организовать проект в виде двух заголовочных и двух программных файлов. Выполнить многофайловую компиляцию
C++ Слияние двух файлов по алгоритму: цифра вставляется после двух символов
Сравнение двух текстовых файлов C++
Сравнение двух чисел C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
21.05.2012, 01:29     Побайтное сравнение двух файлов #8
KeyGen, не знаю. Я лично за хардкор. Автор кода на истинном пути =)
Так что либо скажите, какой ошибкой это чревато, либо...

Мне лично вообще код очень понравился. Читать приятно, всё сразу понятно, не хватает разве только египетских скобок (не готов терять лишние строчки даже будучи обладателем 27'' диагонали). И я не вижу ошибки, которая могла бы возникнуть из-за этого. Если у одного из файлов конец раньше, чем у другого, то это значит, что count++ как минимум один раз сработал! Ведь EOF != (!EOF). Логика, @&#^%$!
Yandex
Объявления
21.05.2012, 01:29     Побайтное сравнение двух файлов
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru