Форум программистов, компьютерный форум CyberForum.ru

как поставить EOF? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.95
DPS
 Аватар для DPS
32 / 32 / 3
Регистрация: 12.11.2011
Сообщений: 107
Завершенные тесты: 1
31.01.2012, 16:12     как поставить EOF? #1
Ребят, подскажите пожалуйста. Итак, вот листинг программы. Если я открываю файл, созданный с помощью потока, все читается без проблем(я так понимаю, символ EOF ставится автоматически).
Если же я открываю файл, созданный вот так: создать-тесктовый файл и ввожу в него текст, то потом при попытке чтения из него получается бесконечный цикл(видимо, нельзя найти конец файла). Посоветуйте, пожалуйста, что можно сделать в данной ситуации... Читал про символ EOF, но, честно говоря, так и не понял как можно его поставить.

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
#include<iostream>
#include<windows.h>
#include<fstream>
using namespace std;
//////////////////////////////////////////
char* Rus(const char* text);    //перевод
//////////////////////////////////////////
 
int main()
{
    char namefile[90];
    cin.getline(namefile,89);
    char buffer[81];            //содержит
                                //текст
    ifstream in(namefile);
 
    if(in.is_open())
        cout<<Rus("Файл успешно открыт\n");
 
    while(!in.eof())            //пока не
    {                           //достигнут конец
        in.getline(buffer,80);
        cout<<Rus(buffer)<<endl;
    }
 
return 0;
}
 
//////////////////////////////////
char bufRus[256];
 
char* Rus(const char* text)
{
    CharToOem(text, bufRus);
    return bufRus;
}
Добавлено через 4 часа 8 минут
Так символ конца файла представляется только если открыть файл в <двоичном> режиме??
В текстовом я так понимаю, его никак поставить нельзя (т.к. он невидим)?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
31.01.2012, 16:44     как поставить EOF? #2
нет никакого eof в конце файла - это абстракция. а бесконечный цикл может быть если открываемый файл не существует
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
31.01.2012, 16:52     как поставить EOF? #3
Цитата Сообщение от DPS Посмотреть сообщение
Если же я открываю файл, созданный вот так: создать-тесктовый файл и ввожу в него текст, то потом при попытке чтения из него получается бесконечный цикл(видимо, нельзя найти конец файла). Посоветуйте, пожалуйста, что можно сделать в данной ситуации... Читал про символ EOF, но, честно говоря, так и не понял как можно его поставить.
Попробуйте добавить в конец файла символ
Код
'\n'
Добавлено через 46 секунд
Цитата Сообщение от retmas Посмотреть сообщение
это абстракция.
Смотря что иметь ввиду. Не нужно забывать, что для виндовс существует символ #26.
DPS
 Аватар для DPS
32 / 32 / 3
Регистрация: 12.11.2011
Сообщений: 107
Завершенные тесты: 1
31.01.2012, 16:57  [ТС]     как поставить EOF? #4
ну как же определяется конец файла?? Если я создам файл с помощью, допустим
C++
1
2
3
4
5
6
7
char namefile[90];
 
    cin.getline(namefile,89);
 
    ofstream out(namefile);
 
    out<<12<<34<<45;
Файл создается, и в дальнейшем при считывании файла вот это (если поток ifstream in):
C++
1
2
3
4
5
        while(!in.eof())                        
        {                                                      
                in.getline(buffer,80);
                cout<<buffer<<endl;
        }
работает корректо, т.е., видимо, программа дописывает этот символ.

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

Или функция EOF() работает, только если файл открыть в <двоичном> режиме?
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
31.01.2012, 17:00     как поставить EOF? #5
Цитата Сообщение от go Посмотреть сообщение
Смотря что иметь ввиду. Не нужно забывать, что для виндовс существует символ #26
не думаю, что при програмной записи текста в файл, или ручном(через блокнот, например) в конец будет записан этот символ. а бесконечный цикл - только из-за того, что поток приходит в состояние fail(без установки eof), если файл не найден. и не стоит мудрить с
Цитата Сообщение от go Посмотреть сообщение
'\n'
и еще чем-то

Добавлено через 1 минуту
DPS, пишите
C++
1
2
3
4
5
        while(in)                        
        {                                                      
                in.getline(buffer,80);
                cout<<buffer<<endl;
        }
DPS
 Аватар для DPS
32 / 32 / 3
Регистрация: 12.11.2011
Сообщений: 107
Завершенные тесты: 1
31.01.2012, 17:08  [ТС]     как поставить EOF? #6
Я дописал в конец файла '\n', в результате мне было выведено "файл" успешно открыт, и цикл
C++
1
2
3
4
5
 while(!in.eof())                       
        {                                                    
                in.getline(buffer,80);
                cout<<Rus(buffer)<<endl;
        }
выполнятся не стал.

Добавлено через 1 минуту
C++
1
2
3
4
5
        while(in)                        
        {                                                      
                in.getline(buffer,80);
                cout<<buffer<<endl;
        }
а при этом из файла выводится только одна строчка(((
Yandex
Объявления
31.01.2012, 17:08     как поставить EOF?
Ответ Создать тему
Опции темы

Текущее время: 16:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru