Улучшить консольное приложение для чтения - 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;
- завершает программу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д