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

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

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

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

07.10.2010, 13:47. Просмотров 35064. Ответов 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
fasked
Эксперт С++
4975 / 2555 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
07.10.2010, 13:59 #2
End of File это не только файл, как может показаться не первый взгляд.
В компьютерной терминологии end-of-file (конец файла) или просто EOF, является индикатором операционной системы означающим, что данные в источнике закончились. Источниками данных, обычно, являются файлы и потоки.
1
TheMachinist
244 / 176 / 15
Регистрация: 14.06.2010
Сообщений: 422
07.10.2010, 14:01 #3
может кто нибудь обьяснить для чего здесь нужен EOF (end of file),
Не нужен он тут особо , возьми и организуй цикл по другому


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

Добавлено через 12 минут
ещё можно так написать
C++
1
2
3
while (ch = cin.get()) != EOF) {
бла бла бла;
}
но для этого <cstdio> нужен
0
fasked
Эксперт С++
4975 / 2555 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
07.10.2010, 15:23 #5
zikker, ios::eof и EOF совершенно разные вещи, не стоит их мешать и уж тем более не факт, что это должно работать.
0
zikker
2 / 2 / 0
Регистрация: 06.10.2010
Сообщений: 39
07.10.2010, 17:33 #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). Хотя могу и ошибаться.
0
accept
4832 / 3253 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
08.10.2010, 03:34 #7
C++
1
while (cin.is_good())
ошибка чтения вроде не выставляет eof флаг, is_good может не вариант, но eof точно не вариант
0
zikker
2 / 2 / 0
Регистрация: 06.10.2010
Сообщений: 39
08.10.2010, 13:04 #8
Цитата Сообщение от accept Посмотреть сообщение
шибка чтения вроде не выставляет eof флаг
Я не это имел ввиду просто cin.eof свидетельствует о прекращение ввода и
while (ch = cin.get()) != EOF)
по сути эквивалентно
while (!cin.eof())
ch = cin.get();

Цитата Сообщение от accept Посмотреть сообщение
но eof точно не вариант
мой пример вроде как и работает(если не прав то поправьте ибо школота).
0
fasked
Эксперт С++
4975 / 2555 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
08.10.2010, 14:29 #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 - нет никаких ошибок.

Поправьте, если не прав.
4
zikker
2 / 2 / 0
Регистрация: 06.10.2010
Сообщений: 39
08.10.2010, 18:48 #10
Цитата Сообщение от fasked Посмотреть сообщение
eofbit - конец потока/файла.
как я и говорил.
Цитата Сообщение от zikker Посмотреть сообщение
!cin.eof() нужно чтобы прекратить цикл при прекращение ввода
0
Somebody
2799 / 1610 / 150
Регистрация: 03.12.2007
Сообщений: 4,210
Завершенные тесты: 3
09.10.2010, 13:25 #11
Цитата Сообщение от zikker Посмотреть сообщение
мой пример вроде как и работает
Он только eofbit проверяет. А если cin - файл с другого компа или с флешки, а сеть отключилась и флешку вынули, eofbit'а не будет. Будет badbit.
0
zikker
2 / 2 / 0
Регистрация: 06.10.2010
Сообщений: 39
09.10.2010, 14:39 #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)).
0
StUser
11 / 11 / 1
Регистрация: 09.10.2010
Сообщений: 23
09.10.2010, 14:53 #13
В cin может и файл загоняться: myprog.exe < my.text
Ну и как выше написали сработает на Ctrl-Z или Ctrl-D в зависимости от системы, если вводить руками.
0
zikker
2 / 2 / 0
Регистрация: 06.10.2010
Сообщений: 39
09.10.2010, 16:41 #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 функционирует ?
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
09.10.2010, 16:58 #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;
}
1
09.10.2010, 16:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2010, 16:58
Привет! Вот еще темы с ответами:

Для чего нужен шаблон <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; } если...


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

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

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