Переписать исходный текстовый файл в результирующий задом наперед - 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; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяется функция для открытия файла с заданными параметрами
- Определяется функция для определения размера файла
- Определяется функция для чтения содержимого файла в строку
- Определяется функция для обмена значениями двух указателей
- Определяется функция для переворота строки
- Определяется функция для записи содержимого файла
- В функции main проверяется корректность ввода аргументов
- Если аргументов недостаточно, выводится сообщение об ошибке и возвращается код завершения
- Загружается содержимое файла в строку
- Реверсируется порядок символов в строке
- Записывается перевернутое содержимое файла обратно в файл
- Программа завершается успешно
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д