Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <malloc.h>
- #include <assert.h>
- int main()
- {
- FILE *input, *output;
- int size = 0;
- char ch;
- char ch_tmp = EOF;
- input = fopen("input.txt", "r");
- ch = fgetc(input);
- while(ch != EOF)
- {
- if(ch == '\n')
- {
- size++;
- }
- ch_tmp = ch;
- ch = fgetc(input);
- }
- if(ch_tmp != '\n') //строка без \n в конце
- {
- size++;
- }
- int *lines = (int *) malloc(size * sizeof(int)); //массив с номерами позиций начал строк
- int *lineslens = (int *) malloc(size * sizeof(int)); //и их длинами
- int i = 0, k = 0, tmp = 0;
- output = fopen("output.txt", "w");
- fseek(input, 0, SEEK_SET); //идем в начало инпута
- do //получение позиций начал строк
- {
- ch = fgetc(input);
- i++; //прочитано символов
- if (ch == '\n' || ch == EOF)
- {
- lines[k] = tmp;
- lineslens[k] = i - tmp - 1;
- tmp = i;
- k++; //текущее количество насчитанных строк
- }
- } while (k < size);
- for (i = size - 1 ; i > -1 ; i--)
- {
- k = 0;
- fseek(input, lines[i], SEEK_SET); //начиная с конца инпута, перемещаем указатель поочередно на начала строк
- while (k < lineslens[i])
- {
- ch = fgetc(input); //пришли в начало строки, читаем, пока счетчик не перевалит за длину строки
- fputc(ch, output); //вот тут оно и падает. начала строк определяет правильно
- k++;
- };
- fputc('\n', output);
- }
- fclose(output);
- fclose(input);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement