Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

23.05.2011, 12:48. Просмотров 406. Ответов 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++):

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

Данные в поток - C++
Ув. профи ,не подскажите ли , Как данные находящиеся в (LPCVOID)pdib и размером dwSize запихнуть в поток, для последующего чтения....

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

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

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

Запихнуть в vector<int>, char? - C++
Всем доброго времени суток! Вот решил написать программу, которая переводила бы число из десятичной системы счисления в шеснадцатиричную...

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

Добавлено через 2 минуты
А можно вообще ни чего не считывать, а использовать cin.peek()
1
Gepar
1178 / 534 / 20
Регистрация: 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
Привет! Вот еще темы с ответами:

Запихнуть переменную по символьно в массив - C++
Помогите запихнуть в массив переменную в массив по символьно, то есть что бы я например вводил в переменную значение: 10.4021 И...

Как xFA запихнуть в string? - C++
В xml фале содержится подобная штука Как при редактировании файла её не потерять? Под редактированием я понимаю: считывание всех...

Как в char запихнуть переменную? - C++
Здрасте, подскажите пожалуйста, возможно ли в char запихнуть свою переменную? Допустим int x = 123; char com = &quot;Asd&quot;+x+&quot;.&quot;; Ну, я...

Как запихнуть массив строк в класс? - C++
Есть класс, один из методов который использует массив строк: char* pszName = { &quot;Anton&quot;, &quot;Alex&quot; }; Сейчас это вне класса, как в...


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

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

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