Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Riderik
28 / 28 / 4
Регистрация: 24.07.2011
Сообщений: 171
#1

Поток ввода без ошибок

04.09.2011, 15:29. Просмотров 783. Ответов 2
Метки нет (Все метки)

В чем состоит задача: нужно организовать ввод вещественных чисел в массив с помощью cin. И нужно, чтобы при вводе символа не подходящего под double он выбивал ошибку и просил ввести снова. С помощью scanf я раньше делал такой макрос:
Код
#define scan( TEXT , FORMAT , ADRES) printf (TEXT); fflush(stdin); while(scanf(FORMAT,ADRES)!=1){ printf("\nОшибка ввода! "TEXT);fflush(stdin); }
Зачем он нужен: сначала выведется текст на экран (первый параметр), затем очистится буфер ввода (если там вдруг что-то завалялось), потом начнется цикл ввода значения пока scanf не вернет true (если ввод успешно завершен).
Можно ли что-то подобное реализовать с помощью cin?

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2011, 15:29
Ответы с готовыми решениями:

Поток ввода-вывода
#include <iostream> using namespace std; int main() { int i; ...

Поток файлового ввода
Что означает функция fin? #include <iostream> //cin и сout (потоковый...

Поток ввода cin
vector<string> str; for (string s; cin >> s && !s.empty(); str.push_back(s));...

Стандартный поток ввода
Доброго времени суток. Допустим есть код: double d; cin >> d; ...

Поток ввода cin
Привет. Я только начинаю учить C++, так что не смейтесь если проблема...

2
Gepar
1181 / 537 / 77
Регистрация: 01.07.2009
Сообщений: 3,517
04.09.2011, 18:01 #2
Ну в цикле считываете данные через cin. Если попалась ошибка (if cin.fail()) - выдаёте уведомление, чистите поток (cin.clear()) , отбрасываете что в потоке (cin.sync()) и снова считываете в переменную данные.
1
Riderik
28 / 28 / 4
Регистрация: 24.07.2011
Сообщений: 171
04.09.2011, 21:44  [ТС] #3
Цитата Сообщение от Gepar Посмотреть сообщение
Ну в цикле считываете данные через cin. Если попалась ошибка (if cin.fail()) - выдаёте уведомление, чистите поток (cin.clear()) , отбрасываете что в потоке (cin.sync()) и снова считываете в переменную данные.
Спасибо, заработало.
Код
#define Cin(TEXT,VAR)\
	do {\
	cout<<TEXT;\
	cin.clear();\
	cin.sync();\
	cin>>VAR;\
	if(cin.fail()) cout<<"Ошибка! ";\
	}while(cin.fail());
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2011, 21:44

Не очищается поток ввода
Ребят,у меня не очищается поток ввода,и не вводится фамилия студента(сразу...

Стандартный поток ввода
В условии задачи написано: на стандартном потоке ввода задаётся...

Обработка ошибок ввода
Доброго времени суток. Имеется код который я написал для обработки ошибок...


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

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

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