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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2013, 08:46   #1
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию cin.ignore()

Добрый день. Читаю книгу, имеется такой вот код:

Код:
#include <iostream>

using namespace std;

int main()
{
	int num = 0;
	while(true)
	{
		cout << "Enter a number: ";
		cin >> num;
		if(cin.good())
		{
			cin.ignore(10, '\n');
			break;
		}
                cin.clear();
		cout << "Wrong value. " << endl;
		cin.ignore(10, '\n');
	}
	cout << "Your number: " << num << endl;
	system("pause");
	return 0;
}
Запрашиваем число и проверяем, чтобы оно было числом, а не символом. Но не все тут понимаю.

Почитал про cin.ignore(). Написано, что он считывает до 10 символов, либо до '\n' и исключает их из потока. Я не понимаю, что означает "исключает из потока". Ведь если выполняется cin.good(), то в моем понимании число исключается из потока и в поток ничего передаваться не должно (ведь значение было исключено). Тем не менее на выходе из программы мы получаем наше число. Помогите, пожалуйста, разобраться.

Последний раз редактировалось Dima-War; 13.07.2013 в 08:49.
Dima-War вне форума Ответить с цитированием
Старый 13.07.2013, 15:48   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

cin.good() лишь проверяет состояние флагов, и ничего не делает с входным буфером.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.07.2013, 16:03   #3
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Нет, я понимаю. Просто когда выполняется условие, то по идее cin.ignore() исключает введенное число из потока. Так почему тогда мы получаем его на выходе из программы?
Dima-War вне форума Ответить с цитированием
Старый 13.07.2013, 16:24   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

число сначала считывается, и лишь потом исключается то что осталось в потоке.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.07.2013, 17:17   #5
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Ок, тогда зачем в условии мы используем cin.ignore()? Ведь по большому счету оно нам ничего не дает. Или я не прав?
Dima-War вне форума Ответить с цитированием
Старый 13.07.2013, 19:23   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Dima-War Посмотреть сообщение
Ок, тогда зачем в условии мы используем cin.ignore()? Ведь по большому счету оно нам ничего не дает. Или я не прав?
в условии её нет.
а если вы имеете в виду истиную ветку ифа, то там она чистит буфер за собой, от лишних символов ввода и самого символа переноса строки(а то с ним бывает морока)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.07.2013, 21:58   #7
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
в условии её нет.
а если вы имеете в виду истиную ветку ифа, то там она чистит буфер за собой, от лишних символов ввода и самого символа переноса строки(а то с ним бывает морока)
Имел ввиду ветку ифа. Все понял, спасибо.
Dima-War вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Insert IGNORE Dozent БД в Delphi 13 04.01.2013 11:12
зачем нужен svn:ignore sashonk Общие вопросы по Java, Java SE, Kotlin 0 03.11.2012 21:54
изза cin.ignore() не записывает 1 символ PotatoCaptain Visual C++ 2 09.01.2012 07:10
ignore empty cells Olya1985 Microsoft Office Excel 17 03.01.2011 18:36
Кнопочка Ignore this exception type работает колько для конкретного проекта? Или сразу для всех? TwiX Общие вопросы Delphi 4 12.06.2010 19:00