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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 206, средняя оценка - 4.96
komunisten
0 / 0 / 0
Регистрация: 10.09.2010
Сообщений: 10
#1

Для чего нужен EOF? - C++

07.10.2010, 13:47. Просмотров 31050. Ответов 24
Метки нет (Все метки)

задание такое:написать программу, печатающую все вводимые символы в верхнем регистре, в строку выодится 16ричный и 8ричный код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <iomanip>
 
void main()
{ 
    using namespace std;
    char ch = 0;
    while(!cin.eof()) {
        ch=cin.get();
        cout<<toupper(ch)<<" | "<<hex<<ch<<" | "<<oct<<ch;
    }
}
может кто нибудь обьяснить для чего здесь нужен EOF (end of file), о каком файле здесь идет речь?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2010, 13:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Для чего нужен EOF? (C++):

Для чего нужен с++? - C++
Я школьник, мне 16 лет, учусь в 10 классе, планирую поступить на факультет защиты информационных технологий. Сейчас начал изучать с++, не...

Для чего нужен символ \b? - C++
для чего нужен символ \b??

Для чего нужен break? - C++
для чего нужен break?

Для чего нужен Sizeof - C++
Вот строка memcpy(pMatrPr, pMatr, sizeof(double) * n * m); Это копирование исходной матрицы в преобразованную А что такое...

Для чего нужен define? - C++
Для чего нужен оператор define? например код #define N 20 /* сколько первых чисел посчитать */ void main(){ ...

Для чего нужен указатель vptr? - C++
для чего нужен указатель vptr?? насколько я знаю, он указывает на таблицу виртуальных функций, а как она работает?

24
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
10.10.2010, 06:19 #16
Цитата Сообщение от zikker
как я это понял имелся ввиду именно ввод из консоли а не считывание файла или сокета
ошибка может и в консоли произойти (не прямо вот в окне, а в том источнике, куда кладутся символы, пока они не прочитаны), в таком случае cin.eof() никогда не наступит и цикл, отслеживающий это дело, повиснет
0
zikker
2 / 2 / 0
Регистрация: 06.10.2010
Сообщений: 39
10.10.2010, 16:05 #17
Цитата Сообщение от accept Посмотреть сообщение
ошибка может и в консоли произойти
А кто говорит(печатает) про ошибки ?
Вопрос зачем .eof()
Ответ для определения конца ввода
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.10.2010, 02:22 #18
Цитата Сообщение от fasked Посмотреть сообщение
Поправочка, не is_good, а просто good.
ios::good - false, если любой из флагов состояний (eofbit, failbit, badbit) активен, то есть и при достижении конца потока/файла и при ошибки чтения/записи.
ios::fail - true, если любой из флагов состояний failbit или badbit активен, то есть проверка только на ошибки.
ios::bad - проверка только флага badbit.

Сами же флаги состояний описывают следующие свойства:
eofbit - конец потока/файла.
failbit - последняя операция завершилась неуспешно в связи с ошибкой в логике самой операции.
badbit - операция завершена неуспешно в связи с отказом записи (или чтения) в поток.
goodbit - нет никаких ошибок.

Поправьте, если не прав.
тут различие есть


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main(void)
{
    fstream f;
    
    cout << cin.good() << endl;
    
    cout << f.is_open() << endl;
    
    cout << f.good() << endl;
    
    //cout << cin.is_open() << endl; // не срабатывает
    
    return 0;
}
Код
[guest@localhost tests]$ g++ t.cpp -o t
[guest@localhost tests]$ ./t
1
0
1
[guest@localhost tests]$ g++ t.cpp -o t
t.cpp: In function ‘int main()’:
t.cpp:17: ошибка: ‘struct std::istream’ has no member named ‘is_open’
[guest@localhost tests]$


Добавлено через 6 минут
Цитата Сообщение от zikker Посмотреть сообщение
А кто говорит(печатает) про ошибки ?
Вопрос зачем .eof()
Ответ для определения конца ввода
Цитата Сообщение от zikker
C++
1
while (ch = cin.get()) != EOF)
по сути эквивалентно
C++
1
while (!cin.eof())
нет, вот как раз первый вариант сделан хоть и неправильно, но если его составить правильно, выйдет из цикла по ошибке, а второй вариант, встретив ошибку в середине cin, просто зациклится

программа должна выйти и сообщить, что встречена ошибка, а не зацикливаться, естественно ничего не сообщая

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
int main(void)
{
    char ch;
    
    while (cin.get(ch))
        cout << ch;
    
    cout << endl;
    
    return 0;
}
здесь после цикла ничего не проверяется, но необходимо вставить проверку потока cin, не было ли в нём ошибки
потому что оно могло прочитать поток до половины, а потом выйти, потому что дальше не читается
0
komunisten
0 / 0 / 0
Регистрация: 10.09.2010
Сообщений: 10
13.10.2010, 16:58  [ТС] #19
ладно, а можно цикл организовать не используя eof? можете написать?
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.10.2010, 03:25 #20
C++
1
2
3
4
5
6
7
8
9
    while (cin.get(ch))
        cout << toupper(ch)
             << " | "
             << hex
             << ch
             << " | "
             << oct
             << ch
             << endl;
0
ObiSan
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 23
15.10.2010, 03:48 #21
На аглоязычной Википедии написано, что eof может воспринимать как конец.
Рекомендую, на внешние ссылки еще зайти.
http://en.wikipedia.org/wiki/End-of-file
0
v.k.l.chr.by
0 / 0 / 0
Регистрация: 22.05.2010
Сообщений: 28
01.04.2011, 18:24 #22
Учу С и столкнулся с одной задачкой как решить.Помогите,плиз.Суть заключается в том,что нужно написать программу для вывода значения константы EOF.
Я так понимаю мне программа выдаст значение EOF,которое есть постоянное,почти бывает постоянным?
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
03.04.2011, 04:37 #23
C
1
printf("%d\n", EOF);
0
Evg
Эксперт CАвтор FAQ
18036 / 6268 / 428
Регистрация: 30.03.2009
Сообщений: 17,244
Записей в блоге: 28
03.04.2011, 13:08 #24
Я тему не читал, но вот пара ссылок, где обсуждался EOF
"я" это EOF?!
Существует ли EOF или это миф?
0
Pobeda
1 / 1 / 1
Регистрация: 08.10.2015
Сообщений: 34
08.10.2015, 17:09 #25
C++
1
2
3
4
while((c=getchar())!=EOF){
    k=toupper(c);
     putchar(k);
    }
0
08.10.2015, 17:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2015, 17:09
Привет! Вот еще темы с ответами:

Для чего нужен шаблон <typename T> - C++
Здравствуйте. template &lt;typename T&gt; T CLAMP(const T&amp; value, const T&amp; low, const T&amp; high) { return (value &lt; low) ? low : ((value...

Виртуальный деструктор, для чего нужен? - C++
Я конечно понимаю, что Но объясните поподробнее и попонятнее для чего это нужно

Для чего нужен тип void? - C++
для чего нужна функция void

Прототип функции.Для чего нужен - C++
для чего нужен прототип в этом примере int func(int a, int b); int main(){...} int func(a,b){ ... return a+b; } если...


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

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

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