Переписать исходный текстовый файл в результирующий задом наперед - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Написать программу, которая переписывает исходный текстовый файл в результирующий задом наперед. И еще 1 условие файл должен задаваться пользователем.... (т.е. никаких input output файлов быть не должно) Предполагается, что имена файлов, с которыми имеет дело программа, передаются ей в командной строке (через аргументы функции main()). В соответствие с этими условиями, обязатель- на проверка правильности ввода командной строки пользователем, корректности открытия файлов и т.д. Помогите пожалуйста для зачета надо

Решение задачи: «Переписать исходный текстовый файл в результирующий задом наперед»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
//-----------------------------------------------------------------------------
FILE* OpenFile(const char fname[], const char params[])
{
   FILE* f = fopen(fname, params);
 
   if (f == NULL)
   {
      perror(fname);
      exit(EXIT_FAILURE);
   }
 
   return f;
}
//-----------------------------------------------------------------------------
size_t FileSize(FILE* f)
{
   fseek(f, 0, SEEK_END);
   size_t size = ftell(f);
   fseek(f, 0, SEEK_SET);
 
   return size;
}
//-----------------------------------------------------------------------------
char* LoadFile(const char fname[], size_t* length)
{
   FILE* f = OpenFile(fname, "r");
 
   size_t size = FileSize(f);
 
   char* text = (char*) malloc(size + 1);
 
   size = fread(text, 1, size, f);
   text[size] = 0;
 
   if (size == 0)
   {
      free(text);
      text = NULL;
   }
 
   fclose(f);
 
   if (length)
   {
      *length = size;
   }
 
   return text;
}
//-----------------------------------------------------------------------------
void Swap(char* a, char* b)
{
   char tmp = *a;
   *a = *b;
   *b = tmp;
}
//-----------------------------------------------------------------------------
char* Reverse(char* begin, char* end)
{
   char* text = begin;
 
   for (; begin < end; ++begin, --end)
   {
      Swap(begin, end);
   }
 
   return text;
}
//-----------------------------------------------------------------------------
void WriteFile(const char fname[], const char* text, size_t length)
{
   FILE* f = OpenFile(fname, "w");
 
   fwrite(text, length, 1, f);
 
   fclose(f);
}
//-----------------------------------------------------------------------------
 
 
int main(int argc, char* argv[])
{
   if (argc != 2)
   {
      fprintf(stderr, "Udage: program <TEXT FILE>\n");
      return EXIT_FAILURE;
   }
 
   size_t length;
   char* text = LoadFile(argv[1], &length);
 
   Reverse(text, text + length - 1);
 
   WriteFile(argv[1], text, length);
 
   return EXIT_SUCCESS;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы
  2. Определяется функция для открытия файла с заданными параметрами
  3. Определяется функция для определения размера файла
  4. Определяется функция для чтения содержимого файла в строку
  5. Определяется функция для обмена значениями двух указателей
  6. Определяется функция для переворота строки
  7. Определяется функция для записи содержимого файла
  8. В функции main проверяется корректность ввода аргументов
  9. Если аргументов недостаточно, выводится сообщение об ошибке и возвращается код завершения
  10. Загружается содержимое файла в строку
  11. Реверсируется порядок символов в строке
  12. Записывается перевернутое содержимое файла обратно в файл
  13. Программа завершается успешно

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы