Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Считывание последней строки в файле, Как реализовать 
V
    Опции темы
Ground
Дата 24.3.2009, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 27.2.2006
Где: Комсомольск

Репутация: нет
Всего: 1



Всем доброго времени суток! 
Погуглил, поискал тут - ничего путного не нашел.
Как можно реализовать вывод последней строки из файла? Номер последней строки известен.
Мне например ничего кроме вот такого, в голову не приходит:
Код

   int a, i, n;

void main(void)
{
    FILE *file;
    file = fopen("input.txt", "r");
    fscanf(file, "%d", &n); //Считываем количество строк.

    for (i=0; i<=n; i++) {
        if (i==n) {
            fscanf(file, "%d", &a);
            fclose(file);
        }
        else {
            fscanf(file, "%d", &a);
        }
    }
    printf("%d\n", a);
}


Есть ли еще какие-нибудь способы?

PS: Это у нас все справедливо, только для случаев, если все строки состоят из чисел типа integer. Если у нас будет float или double, и мы поменяем код, то будет возникать Runtime Error. В чем тут дело?
Код

   int a, i, n;
   float z;

void main(void)
{
    FILE *file;
    file = fopen("input.txt", "r");
    fscanf(file, "%d", &n); //Считываем количество строк.

    for (i=0; i<=n; i++) {
        if (i==n) {
            fscanf(file, "%d", &a);
                fclose(file);
        }
        else {
            fscanf(file, "%f", &z);
        }
    }
    printf("%d\n", a);
}


PPS: Файл текстовый имеет вот такой вид:

N //Количество строк, следующих за этой.
.
.  // Сами строки, в количестве N штук.
.
L // Строка, к которой нам нужно получить доступ.

Это сообщение отредактировал(а) Ground - 24.3.2009, 09:45
PM MAIL ICQ   Вверх
Anikmar
Дата 24.3.2009, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(Ground @  24.3.2009,  09:24 Найти цитируемый пост)
В чем тут дело?


Цитата(Ground @  24.3.2009,  09:24 Найти цитируемый пост)
fscanf(file, "%d", &a);


Цитата(Ground @  24.3.2009,  09:24 Найти цитируемый пост)
fscanf(file, "%f", &z);


Цитата(Ground @  24.3.2009,  09:24 Найти цитируемый пост)
   int a, i, n;
   float z;


То вы float считываете, то int это так надо?


PM MAIL ICQ   Вверх
zim22
Дата 24.3.2009, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Ground @  24.3.2009,  09:24 Найти цитируемый пост)
В чем тут дело?

у меня всё работает
Код

#include <stdio.h>
  int a, i, n;
   float z;

void main(void)
{
    FILE *file;
    file = fopen("input.txt", "r");
    fscanf(file, "%d", &n); //Считываем количество строк.

    for (i=0; i<=n; i++) {
        if (i==n) {
            fscanf(file, "%d", &a);
                fclose(file);
        }
        else {
            fscanf(file, "%f", &z);
        }
    }
    printf("%d\n", a);
}


Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  input.txt 0,02 Kb


--------------------
PM MAIL   Вверх
Ground
Дата 24.3.2009, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 27.2.2006
Где: Комсомольск

Репутация: нет
Всего: 1



У меня файл Input.txt организован следующим образом:
integer
float
...
...
...
integer
Т.е. первая строка - количество строк float. И в конце у нас целое число, к нему нам и надо попасть.

Anikmar, врядли в этом ошибка.
fscanf(file, "%d", &a); - находит нам последнее число, записывает его в адрес переменной a.
fscanf(file, "%f", &z); - тут мы просто прокручиваем все строки до последнего числа (т.к. они дробные, используем float)

zim22, а какой компилятор? у меня, например, MS Visual C++ 6.0.
PM MAIL ICQ   Вверх
mrbrooks
Дата 24.3.2009, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



как вариант 

Код

#include <fstream>
void main(void)
{
std::ifstream ifile("input.txt");
  if (ifile.is_open())
  {
    std::string str;
      while(!ifile.eof())
     {        
         ifile >> str;
         if (ifile.eof()) std::cout << str << std::end;   
     }
      ifile.close();
  }
}


Это сообщение отредактировал(а) mrbrooks - 24.3.2009, 10:37
PM MAIL   Вверх
zim22
Дата 24.3.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Ground @  24.3.2009,  10:21 Найти цитируемый пост)
 а какой компилятор? у меня, например, MS Visual C++ 6.0.

MS Visual C++ 9.0
если у вас есть возможность - выкиньте шестёрку и поставьте что-нибудь поновей.


--------------------
PM MAIL   Вверх
mrbrooks
Дата 24.3.2009, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Цитата(zim22 @  24.3.2009,  10:57 Найти цитируемый пост)
если у вас есть возможность - выкиньте шестёрку и поставьте что-нибудь поновей. 

Дельное предложение. И главное, что можно обновиться совершенно бесплатно.
PM MAIL   Вверх
xvr
Дата 24.3.2009, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Код

void main()
{
 char buf[128];

 FILE* f=fopen("input.txt", "r");
 fseek(f,-256,SEEK_END);
 
 while(fgets(buf,sizeof(buf),f)) ;
 fclose(f);

 int n = atoi(buf); // Ваше число из последней строки
}

PM MAIL   Вверх
Ground
Дата 24.3.2009, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 27.2.2006
Где: Комсомольск

Репутация: нет
Всего: 1



Всем спасибо за помощь!
mrbrooks и xvr, спасибо за варианты, плюсую  smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.2291 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.