Advertisement
Guest User

Untitled

a guest
Nov 29th, 2015
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <assert.h>
  4.  
  5. int main()
  6. {
  7.     FILE *input, *output;
  8.     int size = 0;
  9.     char ch;
  10.     char ch_tmp = EOF;
  11.     input = fopen("input.txt", "r");
  12.  
  13.     ch = fgetc(input);
  14.     while(ch != EOF)
  15.     {
  16.         if(ch == '\n')
  17.         {
  18.             size++;
  19.         }
  20.         ch_tmp = ch;
  21.         ch = fgetc(input);
  22.     }
  23.     if(ch_tmp != '\n') //строка без \n в конце
  24.     {
  25.       size++;
  26.     }
  27.  
  28.  
  29.     int *lines = (int *) malloc(size * sizeof(int)); //массив с номерами позиций начал строк
  30.     int *lineslens = (int *) malloc(size * sizeof(int)); //и их длинами
  31.     int i = 0, k = 0, tmp = 0;
  32.  
  33.     output = fopen("output.txt", "w");
  34.     fseek(input, 0, SEEK_SET); //идем в начало инпута
  35.     do //получение позиций начал строк
  36.     {
  37.         ch = fgetc(input);
  38.         i++; //прочитано символов
  39.         if (ch == '\n' || ch == EOF)
  40.         {
  41.             lines[k] = tmp;
  42.             lineslens[k] = i - tmp - 1;
  43.             tmp = i;
  44.             k++; //текущее количество насчитанных строк
  45.         }
  46.     } while (k < size);
  47.  
  48.     for (i = size - 1 ; i > -1 ; i--)
  49.     {
  50.         k = 0;
  51.         fseek(input, lines[i], SEEK_SET); //начиная с конца инпута, перемещаем указатель поочередно на начала строк
  52.         while (k < lineslens[i])
  53.         {
  54.             ch = fgetc(input); //пришли в начало строки, читаем, пока счетчик не перевалит за длину строки
  55.             fputc(ch, output); //вот тут оно и падает. начала строк определяет правильно
  56.             k++;
  57.         };
  58.         fputc('\n', output);
  59.  
  60.     }
  61.     fclose(output);
  62.     fclose(input);
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement