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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Gepar
 Аватар для Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,516
#1

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

15.05.2011, 13:07. Просмотров 1534. Ответов 4
Метки нет (Все метки)

Как очистить вх. поток от символа конца строки? Вот например нужно мне считать два куска текста (с пробелами и переводами каретки) в два символьных массива
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
Печать значения EOF C++
Скопировать поток и добавить ошибки в поток C++
Очистить поток C++
C++ EOF K&R
C++ \n \0 EOF
Eof не находит конца C++
Как очистить входной поток от '\n'? C++
Почему не срабатывает EOF C++
C++ Как очистить поток ввода?
C++ Очистить поток std::stringstream
C++ Не работает while (!***.eof() !

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1600 / 1228 / 121
Регистрация: 21.12.2010
Сообщений: 1,875
Записей в блоге: 7
15.05.2011, 13:42     Очистить поток от EOF #2
перед cin.ignore() поставьте cin.clear()
asics
Freelance
Эксперт C++
 Аватар для asics
2842 / 1779 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
15.05.2011, 13:44     Очистить поток от EOF #3
Цитата Сообщение от Gepar Посмотреть сообщение
Как очистить вх. поток от символа конца строки?
Еще можно - cin.sync();
Gepar
 Аватар для Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,516
15.05.2011, 13:54  [ТС]     Очистить поток от EOF #4
Цитата Сообщение от asics Посмотреть сообщение
Еще можно - cin.sync();
Это не сработало.
Цитата Сообщение от igorrr37 Посмотреть сообщение
перед cin.ignore() поставьте cin.clear()
А вот это помогло и без cin.ignore(). Но что делает эта cin.clear() и почему cin.ignore() в данном случае не срабатывала? cin.ignore() не пропускает символ конца ввода чтоли?
ValeryLaptev
Эксперт С++
1017 / 796 / 48
Регистрация: 30.04.2011
Сообщений: 1,620
15.05.2011, 13:58     Очистить поток от EOF #5
Потому как clear() - это очистка флагов состояния потока. А ignore() - это игнорирование символа из потока. Совсем разные функции.
Yandex
Объявления
15.05.2011, 13:58     Очистить поток от EOF
Ответ Создать тему
Опции темы

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