Proszenie w pętli o podanie poprawnej wartości zmiennej


(kox8161) #1

Witam,


(tomms) #2

Rozwiązań tego będzie tyle ilu jest programistów, ja bym to zrobił tak:

 

do
	{
		std::cout << "Wprowadz a z zakresu (5-8): ";
		std::cin >> a;
	}
	while( a<5 || a > 8);

(kox8161) #3

Ahh zapomniałem dodać jednego z założeń że, program pokazuje użytkownikowi dokładny komunikat co zrobił źle.


(Drobok) #4
while((cin>>a)&&!(a>5&&a<9))
		cout << "podales za "<< (a>9?"duzo":"malo")<<endl;
	cout << "dobrze podales";

(pio_95) #5

Wykładowca z Ukrainy sprawdzający program uderzeniem ręki w klawiaturę nauczył mnie, że podane tu rozwiązania się nie sprawdzają :smiley:

int a;
cina;

daje niepożądany efekt, gdy użytkownik wpisze literę(y).


(Ostaszewianin) #6

Dokladnie. Pisanie programów “idiotoodpornych” to dobra praktyka, którą mnie też nauczono.

 

A co do tego konkrego przykładu: Jeśli masz wczytywać 1 znak w postaci cyfry, to skorzystaj z funkcji x=getchar, od kodu wczytanego znaku odejmij kod znaku “0” i wtedy sprawdź, czy dany wynik jest w jakimś przedziale (while x<(asc(“5”)-asc(“0”)) … i tak dalej. Jeśli x będzie poza zakresem 0…9, to wyrzuć komunikat, że podano inny znak)


(Drobok) #7

Jak nie chcesz pobierać znaków (czego w założeniach nie było):

while(!((cin>>a)&&(a>5&&a<9))){
	cout << "podales ";
	if(!cin.fail())
		cout << "za" << (a>9?"duzo":"malo")<<endl;
	else cout << " znak";
	cin.clear();
	cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
cout << "dobrze podales";

Jak chcesz coś robić to nie rób nic ponadto czego od ciebie oczekują.