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

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

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

Всем здравствуйте. Товарищи, подскажите: Я написал на С простенькую читалочку, которая открывает текстовый файл и строку за строкой выводит его прямо в консоль. А при нажатии клавиши Enter сохраняет в другом файле номер последней показанной строки и консоль закрывается. Вот код:
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. char s[2000];
  6. int i=0, code;
  7. FILE *fp, *fcl;
  8. fp = fopen ("book.txt", "r"); //Файл из которого читаем книгу.
  9. fcl = fopen ("numstr.txt", "w+"); //Куда сохраняем номер последней
  10. //прочитанной строки.
  11. while (NULL != fgets (s, 2000, fp)) //Цикл, пока не закончится файл
  12. {
  13. printf ("%s", s); //Показываем строку.
  14. i++; //Записываем номер.
  15. code = getch (); //При нажатии
  16. if (code == 13) //клавиши Enter
  17. { //программа
  18. fprintf (fcl, "%d", i); //записывает в отдельный файл номер
  19. break; //последней показанной строки
  20. } //и выходит из цикла.
  21. getch (); //При нажатии другой клавиши
  22. } //цикл повторяется.
  23. fclose (fp);
  24. system("PAUSE");
  25. return 0;
  26. }
И собственно вопрос: Как сделать, чтобы при запуске, она начинала чтение файла
Листинг программы
  1. "book.txt"
с той строки, номер которой записан в
Листинг программы
  1. "numstr.txt"
?

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

textual
Листинг программы
  1. int main()
  2. {
  3.   Start();
  4.   char s[4000];
  5.   int i=0, code, n;
  6.   FILE *fp, *fnum, *fcl;
  7.   //Добавил переменную и указатель          
  8.   fnum = fopen ("numstr.txt", "r");
  9.   fscanf (fnum, "%d", &n);
  10.   fclose (fnum);  
  11.   n--;
  12.  
  13.   fp = fopen ("book.txt", "r");
  14.   fcl = fopen ("numstr.txt", "w+");
  15. //И цикл, который вникуда считывает строки до номера, записанного в n
  16.   while (i<n)
  17.   {
  18.         fgets (s, 4000, fp);            
  19.         i++;        
  20.   }
  21.  
  22.   while (NULL != fgets (s, 4000, fp))      
  23.   {    
  24.         printf ("%s\n", s);            
  25.         i++;                                
  26.         code = getch ();                                                            
  27.         if (code == 13)                      
  28.         {                              
  29.                  fprintf (fcl, "%d", i);  
  30.                  break;                  
  31.         }                                  
  32.         getch ();                          
  33.   }                                        
  34.   fclose (fp);
  35.   fclose (fcl);
  36.   system("PAUSE"); 
  37.   return 0;
  38. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы