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

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

Войти
Регистрация
Восстановить пароль
 
Riderik
28 / 28 / 1
Регистрация: 24.07.2011
Сообщений: 171
#1

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

04.09.2011, 15:29. Просмотров 733. Ответов 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?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2011, 15:29     Поток ввода без ошибок
Посмотрите здесь:

Форматирование поток ввода\вывода C++
C++ Перегрузка ввода/ввывода в/из поток(а)
C++ Поток ввода-вывода
C++ Поток файлового ввода
Стандартный поток ввода, конец файла C++
C++ Стандартный поток ввода
C++ Стандартный поток ввода
C++ Как очистить поток ввода?
Обработка ошибок ввода C++
C++ Обработка ошибок ввода из потока cin
C++ Не очищается поток ввода
C++ Поток ввода cin

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
04.09.2011, 18:01     Поток ввода без ошибок #2
Ну в цикле считываете данные через cin. Если попалась ошибка (if cin.fail()) - выдаёте уведомление, чистите поток (cin.clear()) , отбрасываете что в потоке (cin.sync()) и снова считываете в переменную данные.
Riderik
28 / 28 / 1
Регистрация: 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());
Yandex
Объявления
04.09.2011, 21:44     Поток ввода без ошибок
Ответ Создать тему
Опции темы

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