как запретить ввод в некорректном формате и ещё два глупых вопроса)

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Юлько
Сообщения: 10
Зарегистрирован: 30 май 2010, 17:29
Откуда: Берлин

Доброго времени суток!

С С++ познакомилась всего две недели назад, поэтому сильно не бить)) препод - гречанка, говорит с акцентом, довольно ломано и ни фига не понятно, поэтому читаю умные книжки... но лабу надо сдавать, а времени на книжки нету(

В процессе написания простенького тестика возникло 3 вопроса:
- как запретить ввод в неправильном формате?
- почему если последняя команда это вывод текста, то сразу же после вывода окно закрывается, и что сделать чтобы оно не закрывалось? (пока как решение я просто ещё одну переменную ввела, но ведь наверняка можно это сделать изящней?)
- и почему баллы (testscore) не считаются? я их, конечно, тоже единственным знакомым методом считаю, но ведь вроде всё логично...

Дайте добрый совет, пожалуйста!

Вот кусочек моего корявого кода, написанного после прочтения первой главы умной немецкой книжки:

Код: Выделить всё

#include <iostream>
using namespace std;
int main()
{
int Antwort1;
int Antwort2; 
int testscore = 0;
int Ende;
cout<<"Bitte loesen Sie folgende Aufgaben: "; //пожалуйста решите задание//
cout<<"\n"<<"\n";
	{
		cout<<"319 + 72 = "; 
		cin>>Antwort1;
		if (Antwort1 == 391) 
		{ 
			testscore = testscore++; //по идее количество набранных баллов должно увеличиться на один//
		}
		else if (Antwort1 != int) //собственно проблема: вот тут я хз, как сказать "не число"?//
		{
			cout<<"Bitte geben Sie eine Zahl ein!"; //некорректный формат, введите число//
			cin>>Antwort1; 
			if (Antwort1 == 391)
			{ 
				testscore = testscore++;
			}
			else if (Antwort1 != int)
			{
				cout<<"Chance verpasst! Googeln Sie mal, was ZAHLEN sind!"; //и всё резко закрывается, а не должно бы//
			}
			else 
			{
				testscore = testscore;
                        }
		}
		else
		{
			testscore = testscore;
		}
	}
	{
		cout<<"\n";
		cout<<"\n";
		cout<<"\n";
		if (testscore == 0)
		{
			cout<<"0 Punkte: Du bist ein Loser !!!";
		}
		else if (testscore == 1)
		{
			cout<<"1 Punkt: Du kannst ja gar nichts...";
		}
				cout<<"\n";
       {
		cout<<"\n";
		cout<<"\n";
		cout<<"Geben Sie eine beliebige Zahl ein um das Programm zu beenden"; //чтобы была возможность прочитать написанное//
		cin>>Ende;
	}
}
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Похожая тема не так давно уже обсуждалась на этом форуме.
Вот почитай...
http://forum.developing.ru/showthread.p ... -Borland-C
Dragon
Сообщения: 99
Зарегистрирован: 01 окт 2009, 11:21
Откуда: Odessa
Контактная информация:

Можно ответы вбивать не в int, а в char (надо подумать, как разрядность проверять чтобы нижеприведенная функция корректно работала - можно для этого рекурсией воспользоваться, но наверное это пока вам еще рано) и проверять принадлежность введенных данных к цифровым символам (метод cctype::isdigit()). И после преобразовать char в int.
Например так:

Код: Выделить всё

int char_to_int(char c)
{
   return (int(c) - int('0'));
}
либо через cstdlib::atoi(char).
- почему если последняя команда это вывод текста, то сразу же после вывода окно закрывается, и что сделать чтобы оно не закрывалось? (пока как решение я просто ещё одну переменную ввела, но ведь наверняка можно это сделать изящней?)
Для того чтобы окно висело вместо:

Код: Выделить всё

 cout<<"Geben Sie eine beliebige Zahl ein um das Programm zu beenden"; //чтобы была возможность прочитать написанное//
        cin>>Ende;
используйте system("pause");
- и почему баллы (testscore) не считаются? я их, конечно, тоже единственным знакомым методом считаю, но ведь вроде всё логично...
testscore++;
вместо
testscore = testscore++;

P.S> В конце 1 } забыли, а также Ответ2 (Antwort2) нигде не используется...или это только в этом куске кода?
Юлько
Сообщения: 10
Зарегистрирован: 30 май 2010, 17:29
Откуда: Берлин

Dragon, WinMain, спасибо огромное!
Dragon, по Вашим советам поправила, работает)
Ответить