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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.95
DPS
32 / 32 / 3
Регистрация: 12.11.2011
Сообщений: 109
Завершенные тесты: 1
#1

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

31.01.2012, 16:12. Просмотров 3190. Ответов 5
Метки нет (Все метки)

Ребят, подскажите пожалуйста. Итак, вот листинг программы. Если я открываю файл, созданный с помощью потока, все читается без проблем(я так понимаю, символ 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 минут
Так символ конца файла представляется только если открыть файл в <двоичном> режиме??
В текстовом я так понимаю, его никак поставить нельзя (т.к. он невидим)?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.01.2012, 16:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос как поставить EOF? (C++):

Поставить рандомную матрицу, перепробовал уже много способов. Как поставить? - C++
нужно чтобы матрицу вводил не я после запуска программы,а она сама появлялась с рандомными числами! #include &lt;iostream&gt; #include...

Когда и как срабатывает eof() ? - C++
Программа: #include &lt;Windows.h&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include &lt;iomanip&gt; using...

Как ввести EOF с клавиатуры? - C++
как ввести EOF c клавиатуры ?

Как детектировать EOF с fgets/gets - C++
Проблема в определении: Файл1: строка1 строка2 EOF Файл2: строка1 строка2EOF

std::cin, eof не всегда принимается как признак конца файла - C++
std::string text; char ch = 0; while(!std::cin.get(ch).eof()){ text.append(1, ch); } Ввожу в консоль в Windows: &quot;^Z&quot;...

Прочитать символы из файла, используя eof() (программа работает не так, как ожидается) - C++
Здравствуйте, мне нужно прочитать символы из файла(желательно с пробелами). Использую eof(), но складывается впечатление, что он не...

5
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
31.01.2012, 16:44 #2
нет никакого eof в конце файла - это абстракция. а бесконечный цикл может быть если открываемый файл не существует
1
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
31.01.2012, 16:52 #3
Цитата Сообщение от DPS Посмотреть сообщение
Если же я открываю файл, созданный вот так: создать-тесктовый файл и ввожу в него текст, то потом при попытке чтения из него получается бесконечный цикл(видимо, нельзя найти конец файла). Посоветуйте, пожалуйста, что можно сделать в данной ситуации... Читал про символ EOF, но, честно говоря, так и не понял как можно его поставить.
Попробуйте добавить в конец файла символ
Код
'\n'
Добавлено через 46 секунд
Цитата Сообщение от retmas Посмотреть сообщение
это абстракция.
Смотря что иметь ввиду. Не нужно забывать, что для виндовс существует символ #26.
1
DPS
32 / 32 / 3
Регистрация: 12.11.2011
Сообщений: 109
Завершенные тесты: 1
31.01.2012, 16:57  [ТС] #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() работает, только если файл открыть в <двоичном> режиме?
0
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
31.01.2012, 17:00 #5
Цитата Сообщение от go Посмотреть сообщение
Смотря что иметь ввиду. Не нужно забывать, что для виндовс существует символ #26
не думаю, что при програмной записи текста в файл, или ручном(через блокнот, например) в конец будет записан этот символ. а бесконечный цикл - только из-за того, что поток приходит в состояние fail(без установки eof), если файл не найден. и не стоит мудрить с
Цитата Сообщение от go Посмотреть сообщение
'\n'
и еще чем-то

Добавлено через 1 минуту
DPS, пишите
C++
1
2
3
4
5
        while(in)                        
        {                                                      
                in.getline(buffer,80);
                cout<<buffer<<endl;
        }
0
DPS
32 / 32 / 3
Регистрация: 12.11.2011
Сообщений: 109
Завершенные тесты: 1
31.01.2012, 17:08  [ТС] #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;
        }
а при этом из файла выводится только одна строчка(((
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2012, 17:08
Привет! Вот еще темы с ответами:

Обработка .txt кодировка ANSI и UTF-8 (буква "я" в ANSI воспринимается как EOF) - C++
Есть следующий кусок кода: FILE* fp = fopen(&quot;G:\OPND1.txt&quot;, &quot;r&quot;); if (fp!=NULL) // если файл удалось открыть { while((ch =...

\n \0 EOF - C++
Добрый вечер, возник такой вопрос: зачем мы заменяем символ конца строки на нуль символ в данном коде (удаление символов содержащихся в s2...

EOF K&R - C++
Всем доброго времени суток. Изучаю Си по Дейтелам, а теперь попала в руки книга авторов языка. Интересно теперь будет параллельно по двум...

Не работает while (!***.eof() ! - C++
Здравствуйте, задание такое: Вводить с клавиатуры данные и записывать их в файл в виде Имя группа оценка Иванов ...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
31.01.2012, 17:08
Ответ Создать тему
Опции темы

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