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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2014, 12:10   #1
Negent
Студент
Пользователь
 
Аватар для Negent
 
Регистрация: 11.06.2010
Сообщений: 39
Радость Только цифры в cin

Доброго времени суток!
Написал программу, которая считывает и выводит элементы массива... Всё просто, но на самом деле, мне бы чуть больше понимания, как работает кусок кода (программа рабочая).
Код:
Код:
//Эта программа добивается ввода чисел, вместо всякой ерунды
#include <iostream>
#include "stdafx.h"
using namespace std;

void main ()
{
	int Ar[5];
	int value;
	for (int i=0; i<5; i++)
	{
		cout<<"Ar["<<i+1<<"]: ";
		cin>>value;
		while (!cin)
		{
			cout<<"Enter again A["<<i+1<<"]: ";
			cin.clear ();
			while (cin.get ()!= '\n') continue;
			cin>>value;
		}
		Ar[i] = value;
	}
	cout<<"Exit!"<<endl;
	for (int i=0; i<5; i++)
	cout<<"A["<<i+1<<"]: "<<Ar[i]<<endl;
	system ("pause");
}
А именно, вот этот кусок:
[code]for (int i=0; i<5; i++)
{
cout<<"Ar["<<i+1<<"]: ";
cin>>value;
while (!cin)
{
cin.clear ();
while (cin.get ()!= '\n') continue;
cout<<"Enter again A["<<i+1<<"]: ";
cin>>value;
}
Ar[i] = value;
}[/QUOTE]

Проверьте пожалуйста, ход рассуждений (только это, переписывать ничего не надо в коде!):
1. Ввод значения во временную переменную "value".
2. Если введённое значение не подходит, то в очереди потока в cin, выставляется флаг, имеющий значение "ложь", что даёт запуск цикла "while". (истина = не-ложь)
3. Цикл "while (!cin)" операторами в теле цикла: cin.clear() очищает очередь символов , а while (cin.get()) выполняет сброс символа новой строки столько раз, пока они там есть. Continue выполняет новую и новую итерацию, пока там ещё есть символы новой строки. Сам cin.clear () не может выполнить очистку на символы новой строки.
4. Производится считывание временной переменной "value", если оно истинно, т.е. введено корректное значение (число), то флаг в условии цикла while (!cin) равен "истина".
5. Число присваивается элементу массива. При наличии корректного ввода, происходит выполнение цикла for (), без циклов while()
"...Попытайся ухватить звёзды с небес, чем переживай, что до них не дотянуться..."

Последний раз редактировалось Stilet; 22.06.2014 в 13:15.
Negent вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввод - сделать так, чтобы в Edit можно было вводить только цифры, или на оборот, только буквы BastAngel Общие вопросы Delphi 7 27.04.2012 01:15
iostream считать из файла ТОЛЬКО цифры Egyptorium Visual C++ 2 06.01.2012 17:41
Как сделать, чтобы было только нажати 3 цифры XxXGhosTXxX Общие вопросы C/C++ 6 20.03.2011 15:31
Как в Edit вводить только цифры subsonic Общие вопросы Delphi 5 29.03.2010 23:39