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

Очистить поток от EOF - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
15.05.2011, 13:07     Очистить поток от EOF #1
Как очистить вх. поток от символа конца строки? Вот например нужно мне считать два куска текста (с пробелами и переводами каретки) в два символьных массива
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# include <iostream>
using namespace std;
 
int main()
{
    int n=127;
    char ch1[n];
    char ch2[n];
    cout<<"cin.get in ch1: ";
    cin.get(ch1,n, EOF);
    cout<<"/ncin.get in ch2: ";
    cin.get(ch2,n, EOF);
    cout<<"/n/nCh1 is: "<<ch1<<"\nCh2 is: "<<ch2;
}
Но после ввода первого куска текста и нажатия ctrl+z символ конца строки остаётся во входящем потоке (у меня в системе он равен -1 это если попробовать cin.eof()) и второй ввод куска текста во второй симвльный массив не происходит. Как же убрать EOF из потока? cin.ignore() не помогает.
Задача по сути выдуманная и я просто хочу разобраться с этим так что решение вроде "измени условие чтобы конец ввода в первом случае был символом @" или ещё что подобное не пойдёт, хочу именно понять как очистить поток от символа конца ввода.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2011, 13:07     Очистить поток от EOF
Посмотрите здесь:

C++ Int Eof
Скопировать поток и добавить ошибки в поток C++
Очистить поток C++
C++ EOF K&R
C++ \n \0 EOF
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
15.05.2011, 13:42     Очистить поток от EOF #2
перед cin.ignore() поставьте cin.clear()
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
15.05.2011, 13:44     Очистить поток от EOF #3
Цитата Сообщение от Gepar Посмотреть сообщение
Как очистить вх. поток от символа конца строки?
Еще можно - cin.sync();
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
15.05.2011, 13:54  [ТС]     Очистить поток от EOF #4
Цитата Сообщение от asics Посмотреть сообщение
Еще можно - cin.sync();
Это не сработало.
Цитата Сообщение от igorrr37 Посмотреть сообщение
перед cin.ignore() поставьте cin.clear()
А вот это помогло и без cin.ignore(). Но что делает эта cin.clear() и почему cin.ignore() в данном случае не срабатывала? cin.ignore() не пропускает символ конца ввода чтоли?
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
15.05.2011, 13:58     Очистить поток от EOF #5
Потому как clear() - это очистка флагов состояния потока. А ignore() - это игнорирование символа из потока. Совсем разные функции.
Yandex
Объявления
15.05.2011, 13:58     Очистить поток от EOF
Ответ Создать тему
Опции темы

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