Скопировать строки из одного файла в другой в обратном порядке - C (СИ)
Формулировка задачи:
Необходимо написать программу ,копирующую строки из одного файла в другой в обратном порядке. Буду благодарен за помощь
Решение задачи: «Скопировать строки из одного файла в другой в обратном порядке»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ROW { char * str; struct ROW * next; } row_t; row_t * push(row_t * top, const char * str){ row_t * row; if ( ( row = malloc(sizeof(row_t)) ) == NULL ){ perror("malloc"); return NULL; } if ( ( row->str = strdup(str) ) == NULL ){ perror("strdup"); return NULL; } row->next = top; return row; } char * pop(row_t ** top, char * str){ row_t * ret; if ( ! *top ) return NULL; strcpy(str, (*top)->str); ret = (*top)->next; free((*top)->str); free(*top); *top = ret; return str; } #define IN_FILE_NAME "in.txt" #define OUT_FILE_NAME "out.txt" int main(void){ FILE * f; char buf[BUFSIZ]; row_t * stk; if ( ( f = fopen(IN_FILE_NAME, "r") ) == NULL ){ fprintf(stderr, "Can't open file %s for input!\n", IN_FILE_NAME); exit(1); } for ( stk = NULL; fgets(buf, BUFSIZ, f) && ( stk = push(stk, buf) ); ) ; if ( ! stk ){ fprintf(stderr, "Memory error!\n"); fclose(f); exit(1); } if ( ferror(f) ){ fprintf(stderr, "Error while reading input file!\n"); exit(1); } if ( fclose(f) ){ perror("fclose"); exit(1); } if ( ( f = fopen(OUT_FILE_NAME, "w") ) == NULL ){ fprintf(stderr, "Can't open file %s for output!\n", OUT_FILE_NAME); exit(1); } while ( pop(&stk, buf) ){ if ( fputs(buf, f) == EOF ){ fprintf(stderr, "Error while writing to output file!\n"); exit(1); } } if ( fclose(f) ){ perror("fclose"); exit(1); } fprintf(stderr, "Done.\n"); exit(0); }
Объяснение кода листинга программы
- Структура данных, используемая в коде, это связанный список (linked list) с помощью структуры
row_t
. - Функция
push
добавляет новую строку в начало списка. - Функция
pop
удаляет и возвращает последнюю добавленную строку из списка. - В функции
main
открывается файлIN_FILE_NAME
для чтения и файлOUT_FILE_NAME
для записи. - Затем строки из
IN_FILE_NAME
добавляются в список с помощью функцииpush
, пока не достигнут конец файла или не закончится память. - После чтения файла
IN_FILE_NAME
, список содержит строки в обратном порядке. - Затем строки из списка (в обратном порядке) записываются в
OUT_FILE_NAME
с помощью функцииfputs
. - Наконец, файлы закрываются, и выводится сообщение об успешном выполнении.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д