Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Gepar
1181 / 537 / 77
Регистрация: 01.07.2009
Сообщений: 3,517
#1

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

23.05.2011, 12:48. Просмотров 418. Ответов 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 извлекались.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2011, 12:48
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Запихнуть данные в поток (C++):

Запихнуть QStringList в поток в файл
Всем привет. Как можно готовые строки для записи в файл в формате QStringList...

Как поток чтения (или записи) запихнуть в класс?
Здравствуйте!!! Ребят, подскажите пожалуйста, собственно, как запихнуть в класс...

Данные в поток
Ув. профи ,не подскажите ли , Как данные находящиеся в (LPCVOID)pdib и...

Поток ofstream не считывает данные в документ .txt
При передаче ofstream, предварительного открытого в функции, вызывающей данную...

Один поток записывает данные в файл, другой читает
Написать код на С++ или С# или на Java Создать два потока. Первый поток...

Необходимо чтобы каждый поток (не файловый) писал данные в ОТДЕЛЬНОЕ ОКНО КОНСОЛИ
Друзья! Разбираюсь с библиотекой pthread, потоки-читатели выводят данные в одно...

2
Kastaneda
Jesus loves me
Эксперт С++
4759 / 2963 / 340
Регистрация: 12.12.2009
Сообщений: 7,521
Записей в блоге: 2
Завершенные тесты: 1
23.05.2011, 15:01 #2
istream& unget()

Добавлено через 2 минуты
А можно вообще ни чего не считывать, а использовать cin.peek()
1
Gepar
1181 / 537 / 77
Регистрация: 01.07.2009
Сообщений: 3,517
23.05.2011, 17:37  [ТС] #3
Цитата Сообщение от Kastaneda Посмотреть сообщение
А можно вообще ни чего не считывать, а использовать cin.peek()
О ней знал, но не сильно с ней удобно. Спасибо за подсказку, сейчас почитаю.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2011, 17:37
Привет! Вот еще темы с решениями:

Скопировать поток и добавить ошибки в поток
Здорова господа! Есть задачка: &quot;Скопируйте поток объектов типа...

Запихнуть в vector<int>, char?
Всем доброго времени суток! Вот решил написать программу, которая переводила...

Запихнуть переменную по символьно в массив
Помогите запихнуть в массив переменную в массив по символьно, то есть что бы я...

Как xFA запихнуть в string?
В xml фале содержится подобная штука Как при редактировании файла её не...


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

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

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