Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
kovrig1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 4
#1

Улучшить консольное приложение для чтения

17.06.2015, 13:10. Просмотров 252. Ответов 3
Метки нет (Все метки)

Всем здравствуйте.
Товарищи, подскажите:
Я написал на С простенькую читалочку, которая открывает текстовый файл и строку за строкой выводит его прямо в консоль. А при нажатии клавиши Enter сохраняет в другом файле номер последней показанной строки и консоль закрывается. Вот код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#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;
}
И собственно вопрос:
Как сделать, чтобы при запуске, она начинала чтение файла
C
1
"book.txt"
с той строки, номер которой записан в
C
1
"numstr.txt"
?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2015, 13:10
Ответы с готовыми решениями:

Разработать консольное приложение
Предусмотреть ввод исходных данных с клавиатуры и вывод на экран исходных данных и результата...

Не получается создать консольное приложение в VS
Установил Visual Studio 2012 и не могу создать консольное приложение Win32. Что делать?

Написать консольное приложение-калькулятор
помогите сделать:(

Улучшить программу для решения уравнения методом Гаусса
В общем, есть код для обычного решения уравнения, но мне требуется улучшить, чтобы он решал матрицу...

Открытие файла для чтения
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;clocale&gt; #include &lt;string.h&gt; using namespace...

3
dimabubyakin
160 / 121 / 85
Регистрация: 16.10.2013
Сообщений: 1,738
Завершенные тесты: 5
17.06.2015, 15:30 #2
kovrig1,
1. Открываем "numstr.txt"
2. Читаем позицию
3. Открываем "book.txt"
4. Считаем пока не дойдем до нужной строки и выводим ...
1
gazlan
3139 / 1915 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
17.06.2015, 15:45 #3
Цитата Сообщение от kovrig1 Посмотреть сообщение
с той строки, номер которой записан
Сохранять нужно не номер строки, а позицию в файле. При открытии, переставлять указатель на эту же позицию (ftell,fseek) и начинать чтение с нее.
For text streams, the numerical value may not be meaningful but can still be used to restore the position to the same position later using fseek.
1
kovrig1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 4
18.06.2015, 09:10  [ТС] #4
Спасибо, товарищи! Особенно за ftell и fseek.
Но я сделал по своему, вот так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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;
}
Наверное dimabubyakin, это и имел ввиду
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2015, 09:10

Как написать программу для чтения
Как написать программу для чтения файлов, вызваную из любого места. Проблема состоит в том, что...

Программа для записи сообщений, чтения и добавления в файл
Уважаемые программисты, нужна ваша помощь. Я будущий программист, учусь. Мне нужно создать...

Есть ли функции (библиотеки) на Си для чтения Web-страниц?
И Не только чтения страниц, но создать приложение которое может связаться с базой данных и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru