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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.84
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 13:54     Как ввести EOF с клавиатуры? #1
как ввести EOF c клавиатуры ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2011, 13:54     Как ввести EOF с клавиатуры?
Посмотрите здесь:

C++ Ввести с клавиатуры массив из N чисел (N также вводится с клавиатуры). Найти наименьший из его положительных элементов.
Ввести с клавиатуры массив, распределить память для его размещения и ввести int значения этого массива C++
C++ Как ввести двумерный массив с клавиатуры? Его размерность [n][m] нужно задавать с клавиатуры.
C++ Как ввести в предикат условие с клавиатуры? Подробнее внутри
C++ Как ввести с клавиатуры элементы динамического массива?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
07.08.2011, 13:57     Как ввести EOF с клавиатуры? #2
<Ctrl>+<Z> для Windows
<Ctrl>+<D> для Unix
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 14:17  [ТС]     Как ввести EOF с клавиатуры? #3
C++
1
2
3
4
5
6
while(!EOF)
    {
        cin>>line[i];
        i++;
        size++;
    }
Почему в эта прога не ждет пока я line[i] с клавиатуры ввиду, а сразу закрывается ?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.08.2011, 14:21     Как ввести EOF с клавиатуры? #4
C++
1
2
3
4
while(std::cin >> line[i++])
{
    size++;
}
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
07.08.2011, 14:25     Как ввести EOF с клавиатуры? #5
Цитата Сообщение от Noname2512 Посмотреть сообщение
Почему в эта прога не ждет пока я line[i] с клавиатуры ввиду, а сразу закрывается ?
А ты посмотри, как у тебя в компиляторе EOF задефайнен (всмысле, что он значит), сразу поймешь
C++
1
while(!EOF)
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 14:33  [ТС]     Как ввести EOF с клавиатуры? #6
а он так поймет когда выходить надо ?
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
07.08.2011, 14:37     Как ввести EOF с клавиатуры? #7
C++
1
2
3
4
5
6
do
        {
                cin>>line[i];
                i++;
                size++;
        }while(line[i-1]!=EOF)
по идеи так правильнее
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.08.2011, 14:38     Как ввести EOF с клавиатуры? #8
Цитата Сообщение от Noname2512 Посмотреть сообщение
а он так поймет когда выходить надо ?
если нажмешь
Цитата Сообщение от kazak Посмотреть сообщение
<Ctrl>+<Z> для Windows
<Ctrl>+<D> для Unix
то поймет
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.08.2011, 05:27     Как ввести EOF с клавиатуры? #9
Цитата Сообщение от silentnuke
по идеи так правильнее
если работаешь с EOF, то там должна быть функция, которая возвращает EOF
сам EOF ты прочитать из файла не можешь, потому что это константа, которая возвращается функцией
EOF может возвращаться и в случае ошибки

вот пример
C
1
2
3
4
5
6
    int c;
    FILE *ifp;
 
...
 
    c = getc(ifp);
если в с запишется EOF, то это ещё не значит, что файл закончился
дальше нужно применить ferror() для потока ifp, чтобы узнать, что произошло

а касаемо топика
C++
1
cin>>line[i];
это выражение вообще EOF не возвращает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{
    ifstream in;
    char c = 'n';
    
    cout << c << ' ' << (in >> c) << endl;
    cout << c << ' ' << (in >> c) << endl;
    cout << c << ' ' << (in >> c) << endl;
    
    in.open("file.txt");
    cout << c << ' ' << (in >> c) << endl;
    cout << c << ' ' << (in >> c) << endl;
    cout << c << ' ' << (in >> c) << endl;
    
    return 0;
}
Код
[guest@localhost tests]$ ./t
n 0
n 0
n 0
a 0xbfea69c4
d 0xbfea69c4
f 0xbfea69c4
[guest@localhost tests]$
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.08.2011, 08:52     Как ввести EOF с клавиатуры? #10
Цитата Сообщение от accept Посмотреть сообщение
а касаемо топика
C++
1
 cin>>line[i];
это выражение вообще EOF не возвращает
Но оно принимает значение false в случае считывания EOF, в случае считывания символа(не цифры) в int (или любой другой тип, подразумевающий хранение чисел), и при прочих ошибочных ситуациях.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.08.2011, 09:15     Как ввести EOF с клавиатуры? #11
Цитата Сообщение от Kastaneda Посмотреть сообщение
Но оно принимает значение false в случае считывания EOF, в случае считывания символа(не цифры) в int (или любой другой тип, подразумевающий хранение чисел), и при прочих ошибочных ситуациях.
Не...
Для стримов перегружен оператор void*, который возвращает нуль, если стоят флаги failbit или badbit. Иначе ненулевое значение.
http://www.cplusplus.com/reference/i...erator_voidpt/
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.08.2011, 09:18     Как ввести EOF с клавиатуры? #12
Цитата Сообщение от Kastaneda
Но оно принимает значение false в случае считывания EOF
никакого считывания EOF нет
в потоке заканчиваются символы и системный вызов сообщает об этом
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.08.2011, 09:21     Как ввести EOF с клавиатуры? #13
Цитата Сообщение от diagon Посмотреть сообщение
Для стримов перегружен оператор void*, который возвращает нуль, если стоят флаги failbit или badbit.
Я написал тоже самое, не вдаваясь в подробности)

Цитата Сообщение от accept Посмотреть сообщение
никакого считывания EOF нет
в потоке заканчиваются символы и системный вызов сообщает об этом
Помнится была тема, что-то типа "существует ли EOF", вобщем фразу "считывает EOF" в данном контексте можно считать условной
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
08.08.2011, 11:22     Как ввести EOF с клавиатуры? #14
Будет полезно: http://www.cyberforum.ru/cpp-beginne...ead338868.html
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
08.08.2011, 20:26     Как ввести EOF с клавиатуры? #15
Цитата Сообщение от Noname2512 Посмотреть сообщение
C
1
2
3
4
5
6
while(!EOF)
 {
 cin>>line[i];
 i++;
 size++;
 }
C++
1
while(!cin.eof())
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2011, 01:57     Как ввести EOF с клавиатуры?
Еще ссылки по теме:

Как ввести массив строк с клавиатуры? C++
Как можно ввести с клавиатуры символ не прерывая цикл в программе C++
Как ввести с клавиатуры слова в char? C++

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.08.2011, 01:57     Как ввести EOF с клавиатуры? #16
Цитата Сообщение от Mayonez
C++
1
while(!cin.eof())
это неправильно
см Получить от пользователя фамилию и вывести из этого файла инициалы и год рождения этого человека
Yandex
Объявления
09.08.2011, 01:57     Как ввести EOF с клавиатуры?
Ответ Создать тему
Опции темы

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