Pseudolosowe liczby calkowite nieskonczona petla

0
  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 progam 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.

Mój program cały czas pokazuje ze podalem za mala liczbe i tworzy sie nieskonczona petla dlaczego?

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    srand(time(NULL));
    int wylosowana,podana,licznik=0;
    cout << "losowanie liczby" << (rand()%1000)+1 << endl;
    wylosowana = (rand()+1000) +1;
    cout << "zgadnij wylosowana liczbe" << endl;
    cin >>podana;
    do
    {
        if(podana>1000 && podana <1000)
        {
            cout << "Podales zla liczbe" << endl;
            licznik++;
        }
        if(podana>wylosowana)
        {
            cout<< "Podales za duza liczbe" << endl;
            licznik++;
        }
        else
        cout<< "Podales za mala liczbe " << endl;
        licznik++;
    }
    while(podana!=wylosowana);
    cout<< "Podales prawidlowa liczbe"<< endl;
    return 0;
} 
1

Pobieraj liczbę w petli. Jesli byla zla to i teraz i za milion iteracji taka bedzie.

0

Teraz działa, ale dalej jeżeli podam liczbę większą od wylosowanej i mniejsza od 1000 to pokazuje mi ze podałem za mała liczbe.

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
	srand(time(NULL));
	int wylosowana,podana,licznik=0;
	cout << "losowanie liczby" << (rand()%1000)+1 << endl;
	wylosowana = (rand()+1000) +1;
	cout << "zgadnij wylosowana liczbe" << endl;
	cin >>podana;
	do
    {
        if(podana>1000 || podana <1000){
            cout << "Podales zla liczbe" << endl;
        licznik++;
        cin >>podana;
    }
        if(podana>wylosowana){
            cout<< "Podales za duza liczbe" << endl;
            licznik++;
            cin>> podana;}
            else
                cout<< "Podales za mala liczbe " << endl;
            licznik++;
            cin>> podana;
    }
    while(podana!=wylosowana);
    cout<< "Podales prawidlowa liczbe"<< endl;
    return 0;

    }
 
0
  1. Błąd w linii:
if(podana>1000 && podana <1000)
  1. Jeśli ktoś poda od razu dobrą liczbę to co się stanie?

  2. losujesz dwa razy liczbę

  3. nie liczysz i nie wyświetlasz liczby zgadywań

  4. do debugowania użyj debugera (część IDE) a nie forum, po poprawce masz nadal błędy

0
 if(podana>1000 || podana <0) 
  1. Jeżeli ktoś od razu poda liczbe to program ominie caly kod podany w "do" i wypisze napis podany po while
  2. Poprawiłem
wylosowana = (rand()+1000) +1;
	cout << "losowanie liczby" << endl; 
  1. Jeżęli bede za każdym razem zwiekszał wartość licznika to nie bedzie to ilość zgadywań ?Racja zapomniałem wyświetlić
cout<< "Podales prawidlowa liczbe"<< endl;
    cout<< "Liczna strzalow"<< licznik ; 
0

Przy aktualnym stanie kodu gdy wartość jest od razu dobrze podana:

  • program wypisze "odales za mala liczbe"
  • będzie czekał na wprowadzenie powtórne liczby
  • jeśli będzie powtórnie podana poprawna liczba to:
    a) wypisze "Podales prawidlowa liczbe"
    b) nie zrobi nic z części "wypisując na ekran wylosowaną liczbę oraz liczbę 'strzałów', które oddał gracz."
0

Gdy wyświetle i wpisze wylosowana liczbe to wykonuje sie b) ale nie rozumiem dlaczego losuja mi sie liczby wieksze od 1000

int wylosowana,podana,licznik=0;
	wylosowana = (rand()+1000);
	cout << "losowanie liczby" << wylosowana<< endl; 
1

rand() + 1000 ?
chyba
rand() % 1000

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