Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.84
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
#1

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

07.08.2011, 13:54. Просмотров 7559. Ответов 15
Метки нет (Все метки)

как ввести EOF c клавиатуры ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2011, 13:54
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как ввести EOF с клавиатуры? (C++):

Как ввести двумерный массив с клавиатуры? Его размерность [n][m] нужно задавать с клавиатуры.
Привет всем. Как ввести двумерный массив с клавиатуры? Его размерность нужно...

Как ввести с клавиатуры строку
Добрый день. У меня есть строка в которой 6000 тысяч символов, конец...

Как ввести с клавиатуры слова в char?
подскажите пожалуйста как ввести с клавиатуры "fat a cat sit in the table" или...

Как ввести массив строк с клавиатуры?
как сделать чтоб вводить массив строк с клавиатуры? // Lab13M.cpp:...

Как ввести текстовую переменную в С++ с клавиатуры
Я ввожу так char *str1 = "la"; Все отлично вводиться ! Но мне нужно ввести с...

Ввести с клавиатуры массив, распределить память для его размещения и ввести int значения этого массива
Подскажите пожалуйста. Задача такая : ввести с клавиатуры n элементов массива,...

15
kazak
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
07.08.2011, 13:57 #2
<Ctrl>+<Z> для Windows
<Ctrl>+<D> для Unix
0
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 14:17  [ТС] #3
C++
1
2
3
4
5
6
while(!EOF)
    {
        cin>>line[i];
        i++;
        size++;
    }
Почему в эта прога не ждет пока я line[i] с клавиатуры ввиду, а сразу закрывается ?
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.08.2011, 14:21 #4
C++
1
2
3
4
while(std::cin >> line[i++])
{
    size++;
}
0
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
07.08.2011, 14:25 #5
Цитата Сообщение от Noname2512 Посмотреть сообщение
Почему в эта прога не ждет пока я line[i] с клавиатуры ввиду, а сразу закрывается ?
А ты посмотри, как у тебя в компиляторе EOF задефайнен (всмысле, что он значит), сразу поймешь
C++
1
while(!EOF)
0
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 14:33  [ТС] #6
а он так поймет когда выходить надо ?
0
silentnuke
Android Programmer
139 / 140 / 10
Регистрация: 08.12.2010
Сообщений: 421
07.08.2011, 14:37 #7
C++
1
2
3
4
5
6
do
        {
                cin>>line[i];
                i++;
                size++;
        }while(line[i-1]!=EOF)
по идеи так правильнее
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.08.2011, 14:38 #8
Цитата Сообщение от Noname2512 Посмотреть сообщение
а он так поймет когда выходить надо ?
если нажмешь
Цитата Сообщение от kazak Посмотреть сообщение
<Ctrl>+<Z> для Windows
<Ctrl>+<D> для Unix
то поймет
0
accept
4833 / 3254 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
08.08.2011, 05:27 #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]$
0
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
08.08.2011, 08:52 #10
Цитата Сообщение от accept Посмотреть сообщение
а касаемо топика
C++
1
 cin>>line[i];
это выражение вообще EOF не возвращает
Но оно принимает значение false в случае считывания EOF, в случае считывания символа(не цифры) в int (или любой другой тип, подразумевающий хранение чисел), и при прочих ошибочных ситуациях.
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.08.2011, 09:15 #11
Цитата Сообщение от Kastaneda Посмотреть сообщение
Но оно принимает значение false в случае считывания EOF, в случае считывания символа(не цифры) в int (или любой другой тип, подразумевающий хранение чисел), и при прочих ошибочных ситуациях.
Не...
Для стримов перегружен оператор void*, который возвращает нуль, если стоят флаги failbit или badbit. Иначе ненулевое значение.
http://www.cplusplus.com/reference/iostream/ios/operator_voidpt/
0
accept
4833 / 3254 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
08.08.2011, 09:18 #12
Цитата Сообщение от Kastaneda
Но оно принимает значение false в случае считывания EOF
никакого считывания EOF нет
в потоке заканчиваются символы и системный вызов сообщает об этом
0
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
08.08.2011, 09:21 #13
Цитата Сообщение от diagon Посмотреть сообщение
Для стримов перегружен оператор void*, который возвращает нуль, если стоят флаги failbit или badbit.
Я написал тоже самое, не вдаваясь в подробности)

Цитата Сообщение от accept Посмотреть сообщение
никакого считывания EOF нет
в потоке заканчиваются символы и системный вызов сообщает об этом
Помнится была тема, что-то типа "существует ли EOF", вобщем фразу "считывает EOF" в данном контексте можно считать условной
0
Net_Wanderer
235 / 208 / 29
Регистрация: 08.06.2011
Сообщений: 467
08.08.2011, 11:22 #14
Будет полезно: http://www.cyberforum.ru/cpp-beginners/thread338868.html
0
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
08.08.2011, 20:26 #15
Цитата Сообщение от Noname2512 Посмотреть сообщение
C
1
2
3
4
5
6
while(!EOF)
 {
 cin>>line[i];
 i++;
 size++;
 }
C++
1
while(!cin.eof())
0
accept
4833 / 3254 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
09.08.2011, 01:57 #16
Цитата Сообщение от Mayonez
C++
1
while(!cin.eof())
это неправильно
см http://www.cyberforum.ru/post1889839.html
0
09.08.2011, 01:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2011, 01:57
Привет! Вот еще темы с решениями:

Как ввести с клавиатуры элементы динамического массива?
int *mass=new int; for(int i=0;i&lt;10;i++) { } Как ввести в цикле...

Что такое вектор? И как его ввести с клавиатуры?
Вести с клавиатуры целые числа M,N и вектор A=(a1,a2...an), n=15

Как ввести в предикат условие с клавиатуры? Подробнее внутри
Судари,есть вот такой кусок кода bool killer(Task a) { return...

Ввести с клавиатуры массив из N чисел (N также вводится с клавиатуры). Найти наименьший из его положительных элементов.
Ввести с клавиатуры массив из N чисел (N также вводится с клавиатуры). Найти...


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

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

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