Liczby pseudolosowe c++

0

Witam, mam do zrobienia takie o to zadanie
Twoim zadaniem domowym jest napisanie prostej gry, która ma działać
następująco:

  1. Program losuje liczbę z przedziału od 1 do 1000.
  2. Użytkownik zgaduje liczbę, która została wylosowana.
  3. Jeżeli podana liczba jest za duża (za mała) gra wypisuje stosowny komunikat i
    powraca do kroku 2.
  4. Jeżeli gracz trafi liczbę wylosowaną to program kończy działanie, wypisując na
    ekran wylosowaną liczbę oraz liczbę 'strzałów', które oddał gracz.
    Gra ma być zabezpieczona przed możliwością wprowadzenia błędnych wartości
    liczbowych.

Problem w tym, że gdy wpisze zła liczbę program powinien wyświetlać komunikat zła liczba, i tak robi lecz gdy wpisze poprawną liczbę z zakresu to program powiela komunikat i dopiero po następnym wpisaniu poprawnej liczby pokazuje odpowiedni komunikat.
screenshot-20211023185638.png

#include <iostream>
#include <cstdlib>
#include <ctime>
int main()
{
srand( time( NULL ) );
int liczba =( rand() % 999 ) + 1;
int ile_razy = 0;
int twoja;

std::cin.clear();
std::cin.sync();

std::cout << "Zgadnij liczbe od 1 do 1000." << std::endl << std::endl;
std::cin >> twoja;

if(twoja < 1 || twoja > 1000){
do{
std::cin.clear();
std::cin.sync();
std::cout << "Zla liczba!" << std::endl << std::endl;
std::cin >> twoja;
}while(twoja < 1);

do{
std::cin.clear();
std::cin.sync();
std::cout << "Zla Liczba!" << std::endl << std::endl;
std::cin >> twoja;
}while(twoja > 1000);
}

if(std::cin.good()){
do{
if(twoja > liczba){
ile_razy++;
std::cin.clear();
std::cin.sync();
std::cout << "Za duzo! Sprobuj ponownie." << std::endl << std::endl;
std::cin >> twoja;
}
else
{
ile_razy++;
std::cin.clear();
std::cin.sync();
std::cout << "Za malo! Sprobuj ponownie." << std::endl << std::endl;
std::cin >> twoja;
}
}while(liczba != twoja);
}
else
{
std::cin.clear();
std::cin.sync();
std::cout << "Jeszcze raz!" << std::endl << std::endl;
std::cin >> twoja;
}


if(liczba == twoja){
std::cout << "Zgadles!!! Zgadywales: " << ile_razy << " razy." << std::endl;
std::cin >> twoja;
}

return 0;

}

0

Moim zdaniem powinna być jedna pętla, w której pobierasz wartość od użytkownika i kończy się w momencie trafienia liczby. W ramach tej jednej pętli obsługujesz wszystkie możliwe przypadki (podanie za dużej lub za małej liczby, podanie liczby poza zakresem, wpisanie ciągu, który nie jest liczbą). Obsługiwanie każdej nieprawidłowości osobną pętlą nie jest dobrym pomysłem.

0

Okropnie przekombinowane:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
{
	srand(time(0));	
	for(int min=0,max=1000;;cout<<endl)
	{
		int value=(rand()%(max-min+1))+min;
		cout<<"Zgadnij liczbe od "<<min<<" do "<<max<<" wlacznie"<<endl;
		for(int usertry,count=1;;++count)
		{
			cout<<"Proba "<<count<<": ";
			cin>>usertry;
			if(usertry<value) cout<<"Podana wartosc jest za mala"<<endl;
			else if(usertry>value) cout<<"Podana wartosc jest za duza"<<endl;
			else
			{
				cout<<"Zgadles po "<<count<<" probach"<<endl;
				break;
			}
		}
	}
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1