SHARE
TWEET

Untitled

a guest Apr 21st, 2019 64 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <locale.h>
  4.  
  5. // для задания 1.4
  6. void getputChar(FILE* infile, FILE* outfile)
  7. {
  8.     char cha;
  9.  
  10.     cha = fgetc(infile);
  11.     fputc(cha, outfile);
  12. }
  13.  
  14. // для задания 1.4
  15. int reverseOrder(FILE* infile, int pos, FILE* outfile)
  16. {
  17.     int npos = pos;
  18.     char ch;
  19.     int count;
  20.     int n;
  21.  
  22.     while (1) {
  23.         ch = fgetc(infile);
  24.         if (ch == '\n') {
  25.             count = reverseOrder(infile, npos + 1, outfile) + 1;
  26.             fseek(infile, pos, SEEK_SET);
  27.             for (n = 0; n < count; ++n)
  28.                 getputChar(infile, outfile);
  29.             fputc('\n', outfile);
  30.             return count;
  31.         }
  32.         else if (ch == EOF) {
  33.             if (npos - pos == 0)
  34.                 return 0;
  35.             else {
  36.                 fseek(infile, pos, SEEK_SET);
  37.                 getputChar(infile, outfile);
  38.                 fputc('\n', outfile);
  39.                 return 1;
  40.             }
  41.         }
  42.         else {
  43.             npos++;
  44.         }
  45.     }
  46. }
  47.  
  48. int main(int argc, char **argv)
  49. {
  50.     setlocale(LC_ALL, "Ru");
  51.     FILE *file_ptr; // указатель на файл (задание 1.1)
  52.     int N; // количество строк и символов в строках (задание 1.1)
  53.     int count = 0; // для подсчета количества строк (задание 1.2)
  54.     char ch; // для подсчета количества строк (задание 1.2)
  55.     char text[50] = "0"; // строка для чтения из файла
  56.     FILE *file_ptr1; // указатель на f2 (задание 1.4)
  57.     int a; // для задания 1.3
  58.     char tmp; // для задания 1.3
  59.     FILE *file_ptr2; // вспомогательный файл для задания 1.3
  60.     int c = 0; // для задания 1.4 (определение, какая строка считалась)
  61.  
  62.     file_ptr = fopen("D:\\f1.txt", "w+");
  63.     file_ptr1 = fopen("D:\\f2.txt", "w+");
  64.     file_ptr2 = fopen("D:\\f3.txt", "w+");
  65.  
  66.     if (file_ptr != NULL) {
  67.         printf("Введите количество строк в файле и символов в них (не более 10): \n");
  68.         scanf("%d", &N);
  69.  
  70.         if (N > 10) {
  71.             do {
  72.                 printf("Нужно ввести число не более 10! Повторите ввод: \n");
  73.                 scanf("%d", &N);
  74.             } while (N > 10);
  75.         }
  76.  
  77.         printf("Введите строки не более %d символов.\n", N);
  78.  
  79.         for (int i = 0; i < N; i++)
  80.         {
  81.             printf("Введите %d-ю строку: \n", (i + 1));
  82.             scanf("%s", text);
  83.             if (strlen(text) > N) {
  84.                 do {
  85.                     printf("Нельзя вводить больше %d символов! Введите строку еще раз: \n", N);
  86.                     scanf("%s", text);
  87.                 } while (strlen(text) > N);
  88.                 fputs(text, file_ptr);
  89.                 fputs("\n", file_ptr);
  90.             }
  91.             else
  92.             {
  93.                 fputs(text, file_ptr);
  94.                 fputs("\n", file_ptr);
  95.             }
  96.         }
  97.  
  98.  
  99.         // вывод числа строк в файле (задание 1.2)
  100.         fseek(file_ptr, 0, SEEK_SET);
  101.         while ((ch = fgetc(file_ptr)) != EOF) {
  102.             if (ch == '\n')
  103.                 ++count;
  104.         }
  105.         printf("Количество строк в файле: %d\n", count);
  106.  
  107.  
  108.         // реверс строк в файле (задание 1.3)
  109.         fseek(file_ptr, 0, SEEK_SET);
  110.         while (fgets(text, 50, file_ptr)) {
  111.             count = strlen(text) - 1;
  112.             for (a = 0; a < count / 2; a++) {
  113.                 tmp = text[a];
  114.                 text[a] = text[count - 1 - a];
  115.                 text[count - 1 - a] = tmp;
  116.             }
  117.             fputs(text, file_ptr2);
  118.         }
  119.         // копирование из вспомогательного файла в исходный
  120.         fseek(file_ptr, 0, SEEK_SET);
  121.         fseek(file_ptr2, 0, SEEK_SET);
  122.         if (file_ptr2 != NULL) {
  123.             while (fgets(text, 50, file_ptr2)) {
  124.                 fputs(text, file_ptr);
  125.             }
  126.         }
  127.         else {
  128.             printf("Невозможно открыть файл f3\n");
  129.             return 1;
  130.         }
  131.  
  132.  
  133.         // вывод в f2 (задание 1.4)
  134.         fseek(file_ptr, 0, SEEK_SET);
  135.         fseek(file_ptr1, 0, SEEK_SET);
  136.         reverseOrder(file_ptr, 0, file_ptr1);
  137.         /*fseek(file_ptr, 0, SEEK_SET);
  138.         if (file_ptr1 != NULL) {
  139.             while (fgets(text, 50, file_ptr)) {
  140.                 c++;
  141.                 fseek(file_ptr1, strlen(text), SEEK_CUR);
  142.                 fputs(text[strlen(text) - c - 1], file_ptr1);
  143.                 fputs("\n", file_ptr1);
  144.             }
  145.         }
  146.         else {
  147.             printf("Невозможно открыть файл f2\n");
  148.             return 1;
  149.         }*/
  150.  
  151.  
  152.         // вывод содержимого f2 на экран (задание 1.5)
  153.         /*printf("Содержимое файла f2:\n");
  154.         fseek(file_ptr1, 0, SEEK_SET);
  155.         while (fgets(text, 50, file_ptr1)) {
  156.             printf("%s", text);
  157.         }*/
  158.  
  159.         fclose(file_ptr);
  160.         fclose(file_ptr1);
  161.         fclose(file_ptr2);
  162.         _getch();
  163.         return 0;
  164.     }
  165.     else {
  166.         printf("Невозможно открыть файл f1\n");
  167.         return 1;
  168.     }
  169. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top