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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> указатель файла, eof(); 
V
    Опции темы
observateur
Дата 18.11.2006, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 176
Регистрация: 10.6.2006

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



Код

#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;

class money
{
private: int funt;

public: money(): funt(0){}
        money(int m)
        {funt=m;}

        friend istream& operator>>(istream& s, money& m);
        friend ostream& operator<<(ostream& s, money& m);
};
/////////////////////////////////////////
istream& operator>>(istream& s, money& m)
{
    
    s>>m.funt;
    return s;
}
/////////////////////////////////////////////
ostream& operator<<(ostream& s, money& m)
{
    s<<m.funt<<endl;
    return s;
}
////////////////////////////////////////////
int main(int argc, char* argv[])
{

    money mon1;

    cout<<"Enter money: ";
    cin>>mon1;



    ofstream ofile;
    ofile.open("manat.txt");

    ofile<<mon1;
    
    ofile.close();

    ifstream ifile;
    ifile.open("manat.txt");

    cout<<"money you entered:\n";
    
    while(!ifile.eof())
    {
        ifile>>mon1;
        cout<<mon1<<endl;
    }


    return 0;
}



вопрос такой : почему у меня на экране выводиться цифры два раза? 
 На пример если по просьбе программы я вывожу цифру 5 почему выходит  два раз …разве после считывания из файла указатель файла не  показывает 
Код
eof();


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


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 15
Всего: 124



ios::eof

The function returns true if the eofbit stream's error flag has been set by a previous i/o operation.

PM MAIL WWW ICQ   Вверх
Earnest
Дата 20.11.2006, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Говоря по русски, состояние eof выставляется не тогда, когда указатель файла доходит до конца, а тогда, когда делается попытка заглянуть за него.


--------------------
...
PM   Вверх
Frekenbok
Дата 21.11.2006, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 29.10.2006

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



Цитата(observateur @  18.11.2006,  20:08 Найти цитируемый пост)
while(!ifile.eof())

В таком цикле получается как бы одна лишняя итерация? Как этого избежать? 

У меня тоже была такая проблема. Приходилось либо до цикла первый раз считывать символ:
Код

c=fgetc(f);
 while (!feof(f)) {
 ...
c=fgetc(f);
}

либо в условии считывать и сравнивать с EOF:
Код

while ((c=fgetc(f))!=EOF)

В этом примере указатель файла еще не перескочил через EOF. Получается, что флаг EOF устанавливается, когда указатель файла стоит на конце файла, а функция feof()!=0, когда указатель стоит за EOF (за "концом")?
PM MAIL   Вверх
maxim1000
Дата 21.11.2006, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 17
Всего: 110



Код

    while(true)
    {
        ifile>>mon1;
        if(ifile.eof())
            break;
        cout<<mon1<<endl;
    }



--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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