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

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

Войти
Регистрация
Восстановить пароль
 
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
#1

Запихнуть данные в поток - C++

23.05.2011, 12:48. Просмотров 386. Ответов 2
Метки нет (Все метки)

Тааак, задам экстремальный вопрос:
В общем была себе перегрузка оператора ввода в одном примере, рассчитана на ввод 14 символов и их сохранение в разных переменных, а теперь вот захотелось мне добавить изначально проверку содержимого, но хитро - так чтобы предыдущий написанный код не редактировать. Так вот проверку входящего потока я пририсовал, а вот теперь хочу чтобы если всё хорошо с потоком то из моего символьного массива всё запихивалось в поток на ввод назад, те: создать для программы впечатление что во входящем потоке уже есть 14 символов из моего массива и теперь при следующем cin>> оно сначала сжевало мои запихнутые 14 символов, а потом уже принималось за считывание ввода с клавиатуры. Можно так?
Изначально вообще код был такой
C++
1
2
3
4
5
6
7
8
9
10
istream &operator>>( istream &ainput, PhoneNumber &number )
{
   ainput.ignore(); // skip (
   ainput >> setw( 3 ) >> number.areaCode; // input area code
   ainput.ignore( 2 ); // skip ) and space
   ainput >> setw( 3 ) >> number.exchange; // input exchange
   ainput.ignore(); // skip dash (-)
   ainput >> setw( 4 ) >> number.line; // input line
   return ainput; // enables cin >> a >> b >> c;       
}; // end function operator>>
Теперь такой
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
istream &operator>>( istream &ainput, PhoneNumber &number )
{
   char c[15];
   ainput.get(c,14);
   if (ainput.gcount()<14)
    ainput.clear(ios::failbit);
   if (c[1]==1 || c[1]==0) 
    ainput.clear(ios::failbit);
   if (c[2]!=0 && c[2]!=1 )
    ainput.clear(ios::failbit);
 
// ВОТ ЗДЕСЬ НАДО БЫ КАК-ТО ПОДПИХНУТЬ В ПОТОК СОДЕРЖИМОЕ МАССИВА СИМВОЛОВ C, НУ КРОМЕ СИМВОЛА '\0' КОНЕЧНО ЖЕ
 
   if (!(ainput.fail())) 
   {
   ainput.ignore(); // skip (
   ainput >> setw( 3 ) >> number.areaCode; // input area code
   ainput.ignore( 2 ); // skip ) and space
   ainput >> setw( 3 ) >> number.exchange; // input exchange
   ainput.ignore(); // skip dash (-)
   ainput >> setw( 4 ) >> number.line; // input line
   }
   return ainput; // enables cin >> a >> b >> c;       
}; // end function operator>>
Добавлено через 14 часов 15 минут
Мне всё ещё любопытно. Конечно же можно просто перекопировать из массива символов моего нужные данные в соотв. переменные, но хотелось научиться запихивать в буфер входящего потока данные чтобы они потом оттудова при следующем cin извлекались.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2011, 12:48     Запихнуть данные в поток
Посмотрите здесь:

C++ Данные в поток
Необходимо чтобы каждый поток (не файловый) писал данные в ОТДЕЛЬНОЕ ОКНО КОНСОЛИ C++
C++ Здравствуйте, как запихнуть базу данных в программу.??
Запихнуть переменную по символьно в массив C++
подскажите пожалуйста как запихнуть в класс конструктор C++
Как запихнуть в exe html файл и открыть его через нужный мне браузер? C++
Как запихнуть в очередь указатель на узел дерева? C++
C++ как поток чтения(или записи) запихнуть в класс?
C++ Запихнуть в vector<int>, char?
C++ Скопировать поток в поток
C++ Как в char запихнуть переменную?
C++ Как запихнуть массив строк в класс?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Форумчанин
Эксперт С++
4468 / 2830 / 224
Регистрация: 12.12.2009
Сообщений: 7,199
Записей в блоге: 1
Завершенные тесты: 1
23.05.2011, 15:01     Запихнуть данные в поток #2
istream& unget()

Добавлено через 2 минуты
А можно вообще ни чего не считывать, а использовать cin.peek()
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
23.05.2011, 17:37  [ТС]     Запихнуть данные в поток #3
Цитата Сообщение от Kastaneda Посмотреть сообщение
А можно вообще ни чего не считывать, а использовать cin.peek()
О ней знал, но не сильно с ней удобно. Спасибо за подсказку, сейчас почитаю.
Yandex
Объявления
23.05.2011, 17:37     Запихнуть данные в поток
Ответ Создать тему
Опции темы

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