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

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

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

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

07.10.2010, 13:47. Просмотров 29945. Ответов 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), о каком файле здесь идет речь?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2010, 13:47     Для чего нужен EOF?
Посмотрите здесь:

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

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

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

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

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

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

Для чего нужен класс auto_ptr_ref? - C++
Здравствуйте, можно поконкретней, для чего нужен класс auto_ptr_ref? Спасибо.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
07.10.2010, 13:59     Для чего нужен EOF? #2
End of File это не только файл, как может показаться не первый взгляд.
В компьютерной терминологии end-of-file (конец файла) или просто EOF, является индикатором операционной системы означающим, что данные в источнике закончились. Источниками данных, обычно, являются файлы и потоки.
TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
07.10.2010, 14:01     Для чего нужен EOF? #3
может кто нибудь обьяснить для чего здесь нужен EOF (end of file),
Не нужен он тут особо , возьми и организуй цикл по другому


fasked , получаутся что-то вроде бесконечного цикла???
zikker
2 / 2 / 0
Регистрация: 06.10.2010
Сообщений: 39
07.10.2010, 14:57     Для чего нужен EOF? #4
!cin.eof() нужно чтобы прекратить цикл при прекращение ввода если бы в условии было ch = cin.get() то цикл бы зациклился ведь false это 0 а eof на большинстве систем -1. таким образом !cin.eof() возвращает 0 только при достижении конца потока/файла.

Добавлено через 12 минут
ещё можно так написать
C++
1
2
3
while (ch = cin.get()) != EOF) {
бла бла бла;
}
но для этого <cstdio> нужен
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
07.10.2010, 15:23     Для чего нужен EOF? #5
zikker, ios::eof и EOF совершенно разные вещи, не стоит их мешать и уж тем более не факт, что это должно работать.
zikker
2 / 2 / 0
Регистрация: 06.10.2010
Сообщений: 39
07.10.2010, 17:33     Для чего нужен EOF? #6
Цитата Сообщение от fasked Посмотреть сообщение
уж тем более не факт, что это должно работать.
Сразу оговорюсь что C/C++ учу около недели но этот пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
using namespace std;
 
int main (int argc, char *argv[]) {
    char ch;
    while (!cin.eof()) {
        ch = cin.get();
        cout << ch << cin.eof() << endl;
    }
    cout << cin.eof() << endl;
    return 0;
}
как бы работает(выводит еденицу только после ctrl d). Хотя могу и ошибаться.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.10.2010, 03:34     Для чего нужен EOF? #7
C++
1
while (cin.is_good())
ошибка чтения вроде не выставляет eof флаг, is_good может не вариант, но eof точно не вариант
zikker
2 / 2 / 0
Регистрация: 06.10.2010
Сообщений: 39
08.10.2010, 13:04     Для чего нужен EOF? #8
Цитата Сообщение от accept Посмотреть сообщение
шибка чтения вроде не выставляет eof флаг
Я не это имел ввиду просто cin.eof свидетельствует о прекращение ввода и
while (ch = cin.get()) != EOF)
по сути эквивалентно
while (!cin.eof())
ch = cin.get();

Цитата Сообщение от accept Посмотреть сообщение
но eof точно не вариант
мой пример вроде как и работает(если не прав то поправьте ибо школота).
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
08.10.2010, 14:29     Для чего нужен EOF? #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от accept Посмотреть сообщение
ошибка чтения вроде не выставляет eof флаг, is_good может не вариант, но eof точно не вариант
Поправочка, не is_good, а просто good.
ios::good - false, если любой из флагов состояний (eofbit, failbit, badbit) активен, то есть и при достижении конца потока/файла и при ошибки чтения/записи.
ios::fail - true, если любой из флагов состояний failbit или badbit активен, то есть проверка только на ошибки.
ios::bad - проверка только флага badbit.

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

Поправьте, если не прав.
zikker
2 / 2 / 0
Регистрация: 06.10.2010
Сообщений: 39
08.10.2010, 18:48     Для чего нужен EOF? #10
Цитата Сообщение от fasked Посмотреть сообщение
eofbit - конец потока/файла.
как я и говорил.
Цитата Сообщение от zikker Посмотреть сообщение
!cin.eof() нужно чтобы прекратить цикл при прекращение ввода
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,190
Завершенные тесты: 1
09.10.2010, 13:25     Для чего нужен EOF? #11
Цитата Сообщение от zikker Посмотреть сообщение
мой пример вроде как и работает
Он только eofbit проверяет. А если cin - файл с другого компа или с флешки, а сеть отключилась и флешку вынули, eofbit'а не будет. Будет badbit.
zikker
2 / 2 / 0
Регистрация: 06.10.2010
Сообщений: 39
09.10.2010, 14:39     Для чего нужен EOF? #12
задание такое:написать программу, печатающую все вводимые символы в верхнем регистре
как я это понял имелся ввиду именно ввод из консоли а не считывание файла или сокета.
Вопрос что такое .eof() а не что использовать.
И мой пример показывает как он работает.(про eofbit никто не спрашивал).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
using namespace std;
 
int main (int argc, char *argv[]) {
        char ch;
    while (!cin.eof()) {
        ch = cin.get();
        cout << "ch = " << ch << " cin.eof() = " << cin.eof() << " cin.eofbit " << cin.eofbit << endl;
    }
    cout << " cin.eof() " << cin.eof() << " cin.eofbit " << cin.eofbit <<  endl;
    return 0;
}
Вывод !cin.eof() для определения конца ввода.(по ctrl d или ctrl z(или что там в windows)).
StUser
11 / 11 / 1
Регистрация: 09.10.2010
Сообщений: 23
09.10.2010, 14:53     Для чего нужен EOF? #13
В cin может и файл загоняться: myprog.exe < my.text
Ну и как выше написали сработает на Ctrl-Z или Ctrl-D в зависимости от системы, если вводить руками.
zikker
2 / 2 / 0
Регистрация: 06.10.2010
Сообщений: 39
09.10.2010, 16:41     Для чего нужен EOF? #14
Цитата Сообщение от StUser Посмотреть сообщение
myprog.exe < my.text
C++
1
2
3
4
5
6
7
8
9
#include <cstdio>
 
int main (int argc, char *argv[]) {
    freopen ("./file", "r", stdin);
    char str[80];
    scanf("%s", str);
    printf("%s", str);
    return 0;
}
Можно и так. +А почему в этом примере cin.getline() не работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
 
int main (int argc, char *argv[]) {
    freopen ("./file", "r", stdin);
    string str;
    cin.getline() >> str;
    cout << str;
    return 0;
}
хотя просто cin >> str функционирует ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2010, 16:58     Для чего нужен EOF?
Еще ссылки по теме:

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

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

Для чего нужен шаблон <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++
Можете доступно объяснить для чего нужен конструктор, на примере этого кода. #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

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


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

Или воспользуйтесь поиском по форуму:
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
09.10.2010, 16:58     Для чего нужен EOF? #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
 
int main (int argc, char *argv[]) {
    freopen ("./file", "r", stdin);
    string str;
    getline(cin, str);
    cout << str;
    return 0;
}
Добавлено через 10 минут
П.С. Это не самый лучший способ для С++ потоков.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <fstream>
#include <string>
#include <iostream>
 
int main()
{
    std::streambuf* backup;
    std::string Str;
    backup=std::cin.rdbuf();
    std::ifstream ifs("Test.txt");
    std::cin.rdbuf(ifs.rdbuf());
    std::getline(std::cin, Str);
    std::cout<<Str<<'\n';
    std::cin.rdbuf(backup);
    std::cin>>Str;
    std::cout<<Str<<'\n';
    return 0;
}
Yandex
Объявления
09.10.2010, 16:58     Для чего нужен EOF?
Ответ Создать тему
Опции темы

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