Улучшить консольное приложение для чтения - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем здравствуйте. Товарищи, подскажите: Я написал на С простенькую читалочку, которая открывает текстовый файл и строку за строкой выводит его прямо в консоль. А при нажатии клавиши Enter сохраняет в другом файле номер последней показанной строки и консоль закрывается. Вот код:
#include <stdio.h>
#include <stdlib.h>
      
int main()
{
  char s[2000];
  int i=0, code;
  FILE *fp, *fcl;
  fp = fopen ("book.txt", "r");             //Файл из которого читаем книгу.
  fcl = fopen ("numstr.txt", "w+");         //Куда сохраняем номер последней
                                            //прочитанной строки.
  while (NULL != fgets (s, 2000, fp))       //Цикл, пока не закончится файл
  {      
        printf ("%s", s);                   //Показываем строку.
        i++;                                //Записываем номер.
        code = getch ();                    //При нажатии                                             
        if (code == 13)                     //клавиши Enter  
        {                                   //программа 
                 fprintf (fcl, "%d", i);    //записывает в отдельный файл номер
                 break;                     //последней показанной строки
        }                                   //и выходит из цикла.
        getch ();                           //При нажатии другой клавиши
  }                                         //цикл повторяется.
  fclose (fp);
  system("PAUSE");  
  return 0;
}
И собственно вопрос: Как сделать, чтобы при запуске, она начинала чтение файла
"book.txt"
с той строки, номер которой записан в
"numstr.txt"
?

Решение задачи: «Улучшить консольное приложение для чтения»

textual
Листинг программы
int main()
{
  Start();
  char s[4000];
  int i=0, code, n;
  FILE *fp, *fnum, *fcl;
  //Добавил переменную и указатель           
  fnum = fopen ("numstr.txt", "r");
  fscanf (fnum, "%d", &n);
  fclose (fnum);  
  n--;
  
  fp = fopen ("book.txt", "r");
  fcl = fopen ("numstr.txt", "w+");
//И цикл, который вникуда считывает строки до номера, записанного в n
  while (i<n)
  {
        fgets (s, 4000, fp);            
        i++;        
  }
 
  while (NULL != fgets (s, 4000, fp))      
  {     
        printf ("%s\n", s);            
        i++;                                
        code = getch ();                                                             
        if (code == 13)                       
        {                               
                 fprintf (fcl, "%d", i);  
                 break;                  
        }                                   
        getch ();                          
  }                                         
  fclose (fp);
  fclose (fcl);
  system("PAUSE");  
  return 0;
}

Объяснение кода листинга программы

  1. int main() - функция main() является точкой входа в программу.
  2. Start(); - вызывает функцию Start(), которая, вероятно, инициализирует программу.
  3. char s[4000]; - объявляет массив s для хранения строк.
  4. int i=0, code, n; - объявляет переменные i, code и n.
  5. FILE *fp, *fnum, *fcl; - объявляет указатели fp, fnum и fcl для работы с файлами.
  6. fnum = fopen (numstr.txt,r); - открывает файл numstr.txt для чтения.
  7. fscanf (fnum,%d, &n); - считывает из файла numstr.txt число и сохраняет его в переменной n.
  8. fclose (fnum); - закрывает файл numstr.txt.
  9. n--; - уменьшает значение n на 1.
  10. fp = fopen (book.txt,r); - открывает файл book.txt для чтения.
  11. fcl = fopen (numstr.txt,w+); - открывает файл numstr.txt для записи и обновления.
  12. while (i<n) - начинает цикл, который считывает строки из файла book.txt до тех пор, пока i меньше n.
  13. fgets (s, 4000, fp); - считывает строку из файла book.txt в массив s.
  14. i++; - увеличивает значение i на 1.
  15. while (NULL != fgets (s, 4000, fp)) - начинает цикл, который считывает строки из файла book.txt до тех пор, пока не будет считан пустой строки (NULL).
  16. printf (%s\n, s); - выводит считанную строку.
  17. i++; - увеличивает значение i на 1.
  18. code = getch (); - получает код из консоли (вероятно, это номер строки).
  19. if (code == 13) - если полученный код равен 13 (ENTER), то переходит к следующему оператору.
  20. fprintf (fcl,%d, i); - записывает значение i в файл numstr.txt.
  21. break; - прерывает цикл.
  22. getch (); - получает код из консоли (вероятно, это номер строки).
  23. fclose (fp); - закрывает файл book.txt.
  24. fclose (fcl); - закрывает файл numstr.txt.
  25. system(PAUSE); - приостанавливает выполнение программы до нажатия клавиши ENTER.
  26. return 0; - завершает программу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы