Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2017, 11:01   #1
Вулф
Новичок
Джуниор
 
Регистрация: 05.07.2017
Сообщений: 4
По умолчанию Пожалуйста, помогите доработать программу на С!

Есть следующая задача: Вам необходимо считать входной файл и вывести все байты этого файла в обратном порядке в выходной файл. Обратите внимание, ограничение по памяти в этой программе такое, что сохранить всё содержимое файла в массиве или строке не получится.

Есть следующий код:
Код:
#include<stdio.h>

int main(){
    FILE *f=fopen("input.dat", "r");
    FILE *n=fopen("output.dat", "w");
    char k;
    int i, a;
    fseek(f, -1, SEEK_END);
    a=ftell(f);
    fscanf(f, "%c", &k);
    fprintf(n, "%c", k);
    for(i=2;i<=a+1;i++){
        fseek(f, -i, SEEK_END);
        fscanf(f, "%c", &k);
        fprintf(n, "%c", k);
    }
    fclose(f);
    fclose(n);
    return 0;
}
Проблема в том, что когда входной файл пуст в выходной файл записывается два нуля. Как сделать так, чтобы выходной файл оставался пустым?

Последний раз редактировалось Вулф; 05.07.2017 в 12:03.
Вулф вне форума Ответить с цитированием
Старый 05.07.2017, 11:26   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

В данном случае файлы открываются в тесктовом режиме.
Открывайте в бинарном.

Ref:
http://en.cppreference.com/w/cpp/io/c/fopen
waleri вне форума Ответить с цитированием
Старый 05.07.2017, 11:29   #3
Вулф
Новичок
Джуниор
 
Регистрация: 05.07.2017
Сообщений: 4
По умолчанию

В бинарном режиме то же самое
Вулф вне форума Ответить с цитированием
Старый 05.07.2017, 11:44   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Далее, зачем нужен размер входного файла?
Кроме того, получив размер файла вы не возвращаете указатель на начало файла.
Размер файла берется не правильно, на один байт меньше.
Условие цикла for довольно странное.
Лучше читайте файл посимвольно fgetc пока не дойдете до конца файла.

Ref:
http://en.cppreference.com/w/c/io/fgetc

PS.
Подсчета частоты я не увидел.
waleri вне форума Ответить с цитированием
Старый 05.07.2017, 12:05   #5
Вулф
Новичок
Джуниор
 
Регистрация: 05.07.2017
Сообщений: 4
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Далее, зачем нужен размер входного файла?
Кроме того, получив размер файла вы не возвращаете указатель на начало файла.
Размер файла берется не правильно, на один байт меньше.
Условие цикла for довольно странное.
Лучше читайте файл посимвольно fgetc пока не дойдете до конца файла.

Ref:
http://en.cppreference.com/w/c/io/fgetc

PS.
Подсчета частоты я не увидел.
Ой, извините, я сначала не ту задачу написал, теперь всё правильно

Последний раз редактировалось Вулф; 05.07.2017 в 12:07.
Вулф вне форума Ответить с цитированием
Старый 05.07.2017, 12:13   #6
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
ftell(f);
Для текстовых файлов это не даст количество байт.
Это даст т.н. position indicator,
который может не совпадать с реальным
количеством байт от начала файла.
Цитата:
Сообщение от Вулф Посмотреть сообщение
Ой, извините, я изначально не ту задачу написал
Прикольно, да.
Croessmah вне форума Ответить с цитированием
Старый 05.07.2017, 12:41   #7
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от Вулф Посмотреть сообщение
Проблема в том, что когда входной файл пуст в выходной файл записывается два нуля. Как сделать так, чтобы выходной файл оставался пустым?
- защиту/проверку поставь на пустоту файла или используй EOF.
Cuprum5 на форуме Ответить с цитированием
Старый 05.07.2017, 12:45   #8
Вулф
Новичок
Джуниор
 
Регистрация: 05.07.2017
Сообщений: 4
По умолчанию

Проблема решена, всем спасибо за помощь
Вулф вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите доработать программу jipumex@cartelera. Паскаль, Turbo Pascal, PascalABC.NET 5 05.10.2016 20:49
Помогите доработать программу. WolfMan96 Помощь студентам 0 26.02.2015 17:46
Анимация. Помогите доработать программу. pavelre Помощь студентам 0 15.10.2014 20:53
помогите доработать программу alexlagunov Visual C++ 19 28.04.2014 12:18
Помогите Пожалуйста доработать тест!!! dimi_87 Помощь студентам 4 23.07.2008 02:07