Witam,
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);
Ahh zapomniałem dodać jednego z założeń że, program pokazuje użytkownikowi dokładny komunikat co zrobił źle.
while((cin>>a)&&!(a>5&&a<9))
cout << "podales za "<< (a>9?"duzo":"malo")<<endl;
cout << "dobrze podales";
Wykładowca z Ukrainy sprawdzający program uderzeniem ręki w klawiaturę nauczył mnie, że podane tu rozwiązania się nie sprawdzają
int a;
cina;
daje niepożądany efekt, gdy użytkownik wpisze literę(y).
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)
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ą.