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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2014, 22:59   #1
Ladis
 
Регистрация: 13.09.2013
Сообщений: 6
По умолчанию Потоки

Код:
#include <iostream>
#include <string>
#include <locale.h>
using namespace std;

int menu();

class Point
{
private:
	int xCoord, yCoord;
public:
	Point();
	Point(int a, int b){xCoord=a, yCoord=b;}
	friend ostream &operator<<(ostream &, const Point);
	friend istream &operator>>(istream &, Point &);
};

ostream &operator<<(ostream &out, const Point obj)
{
	out<<"Значение x: "<<obj.xCoord<<endl<<"Значение y: "<<obj.yCoord<<endl;
	return out;
}

istream &operator>>(istream &in, Point &obj)
{
    cout<<"In x: ";
    if(!(in>>obj.xCoord))
    {
         cout<<"Ошибка ввода x";     // сколько букв введёшь, столько раз и выдаст, надо чтобы 1 раз писало.
         return in;
    };
    cout<<"In y: ";
    if(!(in>>obj.yCoord))
    {
         cout<<"Ошибка ввода y";
    };
    return in;
}



int main()
{
	setlocale(LC_ALL, "Russian");
	Point point(4,5);

	while(1)
	{
		switch(menu())
		{
		case 1:
			int flags;
			char c;
			cout<<"abc"<<endl;
			cout<<point<<endl;
			do
			{
				cin>>point;
				flags=cin.rdstate();
				cout<<endl<<"Состояние потока: ";
				cout<<flags<<endl;
				if(flags & ios::failbit)
				{
					cout<<endl;
					cin.clear();
					cin>>c;
				}
				else cout<<point<<endl;
			}while(flags);
			break;
		case 2:
			exit(0);
			break;
		}

}
}

int menu()
{
	int u;
	do
	{
		cout<<"Меню:\n1)Продолжить\n2)Выход\n";
		while(!(cin>>u))
		{
			system("pause");
			system("cls");
			cout<<"Ошибка!Повторите ввод.";
			system("pause");
			system("cls");
			cout<<"Меню:\n1)Продолжить\n2)Выход\n";
			cin.clear();
			while (cin.get() != '\n');
			continue;
		}
		system("pause");
		system("cls");
	}while(u<1 || u>2);
	return u;
}
Проблема: при вводе букв, сообщение об ошибке выдаёт столько раз, сколько букв введёшь.
Ladis вне форума Ответить с цитированием
Старый 02.04.2014, 08:14   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
if(!(in>>obj.xCoord))
Что это за проверка? Для чего она тут?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потоки. Закрываются все потоки при ошибке в одном. Son Общие вопросы Delphi 11 01.11.2013 09:32
[C#] Потоки Lemo C# (си шарп) 2 24.05.2011 21:50
Потоки. FieStik Общие вопросы C/C++ 4 23.05.2011 14:12
Потоки RedScreenOfLife Общие вопросы C/C++ 5 07.03.2011 14:30
потоки tanek Помощь студентам 6 15.03.2010 21:42