Улучшить консольное приложение для чтения - 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;
- }
Объяснение кода листинга программы
int main()
- функция main() является точкой входа в программу.Start();
- вызывает функцию Start(), которая, вероятно, инициализирует программу.char s[4000];
- объявляет массив s для хранения строк.int i=0, code, n;
- объявляет переменные i, code и n.FILE *fp, *fnum, *fcl;
- объявляет указатели fp, fnum и fcl для работы с файлами.fnum = fopen (
numstr.txt,
r);
- открывает файл numstr.txt для чтения.fscanf (fnum,
%d, &n);
- считывает из файла numstr.txt число и сохраняет его в переменной n.fclose (fnum);
- закрывает файл numstr.txt.n--;
- уменьшает значение n на 1.fp = fopen (
book.txt,
r);
- открывает файл book.txt для чтения.fcl = fopen (
numstr.txt,
w+);
- открывает файл numstr.txt для записи и обновления.while (i<n)
- начинает цикл, который считывает строки из файла book.txt до тех пор, пока i меньше n.fgets (s, 4000, fp);
- считывает строку из файла book.txt в массив s.i++;
- увеличивает значение i на 1.while (NULL != fgets (s, 4000, fp))
- начинает цикл, который считывает строки из файла book.txt до тех пор, пока не будет считан пустой строки (NULL).printf (
%s\n, s);
- выводит считанную строку.i++;
- увеличивает значение i на 1.code = getch ();
- получает код из консоли (вероятно, это номер строки).if (code == 13)
- если полученный код равен 13 (ENTER), то переходит к следующему оператору.fprintf (fcl,
%d, i);
- записывает значение i в файл numstr.txt.break;
- прерывает цикл.getch ();
- получает код из консоли (вероятно, это номер строки).fclose (fp);
- закрывает файл book.txt.fclose (fcl);
- закрывает файл numstr.txt.system(
PAUSE);
- приостанавливает выполнение программы до нажатия клавиши ENTER.return 0;
- завершает программу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д