Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2015, 00:27   #1
Євгеній Бєлік
Пользователь
 
Аватар для Євгеній Бєлік
 
Регистрация: 29.10.2011
Сообщений: 52
По умолчанию Проверка потом ввода, зацикливание

#Проверка потока ввода, зацикливание

Здравствуйте, столкнулся с такой проблемой, что вот ниже приведенный код выводит постоянно текст (который в printf-е), если ввести НЕ число, т.е. любое другое значение, а когда вводишь значение int, то все хорошо. Будто scanf не хочет снова считывать строчку, которую должен пользователь ввести, т.е. она уже что-то хранит и оно его проверяет опять и опять, хотя вроде очищаю поток после прохода цикла.

Код:
bool checking = false;
	do 
	{
		printf("Input count products: ");
		if (scanf("%d", &countProducts) == 1)
		{
			checking = true;
		}
		fflush(stdin);
	} while (checking == false);

Последний раз редактировалось Євгеній Бєлік; 11.11.2015 в 00:32.
Євгеній Бєлік вне форума Ответить с цитированием
Старый 11.11.2015, 01:29   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

fflush примененный к stdin влечет к неопределенному поведению. эта функция применяется только к output потокам. вручную вычитай весь мусор из потока.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 11.11.2015, 15:21   #3
Євгеній Бєлік
Пользователь
 
Аватар для Євгеній Бєлік
 
Регистрация: 29.10.2011
Сообщений: 52
По умолчанию

кому будет интересно, вот решение получилось таким образом:
Код:
void clean_stdin(void)
{
	int c;
	do {
		c = getchar();
	} while (c != '\n' && c != EOF);
}

bool checking = false;
	do 
	{
		printf("Input count products: ");
		if (scanf("%d", &countProducts) == 1)
		{
			checking = true;
		}
		clean_stdin();
	} while (checking == false);
Євгеній Бєлік вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка ввода Mixasnt JavaScript, Ajax 4 23.01.2014 21:07
Форматирование ввода в колонку dataGridView и проверка правильности ввода tumanovalex C# (си шарп) 1 31.05.2011 19:56
Проверка ввода Darth_Programmeder Помощь студентам 6 14.04.2010 16:19
Проверка ввода Paul_AG Общие вопросы C/C++ 16 11.06.2009 16:56
Проверка ввода Panda Помощь студентам 2 08.07.2008 19:23