• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem początkującego

Object Storage Arubacloud
0 głosów
301 wizyt
pytanie zadane 28 maja 2016 w C i C++ przez roko Nowicjusz (160 p.)

Cześć,

nazywam się Łukasz i jestem właśnie na początku swojej koderskiej drogi. Ostatnio wyznaczyłem sobie projekt, którego celem jest napisanie programu, który prosi o podanie liczby od 3 do 30, a następnie losuje liczby pseudolosowe do momentu, aż wylosuje tę samą liczbę, którą podał użytkownik, a wtedy informuje go o tym i wydaje dźwięk z głośniczka systemowego. Program zamiast działać losuje w nieskończoność i zawiesza się. Dlatego zdecydowałem się poprosić o pomoc. Zdaję sobie sprawę, że kod może mieć mnóstwo błędów i może wyglądać tragicznie, ale proszę o zrozumienie, to początki :) Kiedyś będzie lepiej. Więc jeśli ktoś wie to proszę powiedzieć co poprawić w tym kodzie, aby program działał jak należy. Dziękuję i pozdrawiam!

 

#include <iostream>
#include <windows.h>
#include <time.h>

using namespace std;

int liczba_usera, liczba_losowa;

int main()
{
    cout << "Witaj, podaj liczbe miedzy 3, a 30";
    cin >> liczba_usera;

    while (liczba_usera = liczba_losowa);
    {
        srand(time(NULL));
        liczba_losowa = rand()%3-31;
        cout<<"Wylosowano Twoja liczbe:"<<liczba_losowa<<"\a";
    }

    return 0;
}

 

1
komentarz 28 maja 2016 przez Thamed Obywatel (1,080 p.)
użyj == to jest porównanie, bo = to przypisanie.

Tam w while :D

3 odpowiedzi

0 głosów
odpowiedź 28 maja 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
edycja 28 maja 2016 przez ZakosiliMiNeta
Te losowanie jest skopane

1 srand(time(NULL)); <- umieszczasz odrazu po  int main () nie gdzieś w środku

2 ta liczba losowa  powina wyglądać tak liczba_losowa =  (rand()+3) % 31, chyba w każdym normalnym języku operatory maja swoją wagę i operator % ma najwyższą wagę jak dobrze pamiętam, czyli w przypadku bez nawiasów wykona operacje 3 % 31 a potem ten wynik z rand ()

3  = to przypisanie, a  czy równa się to ==

4 W tym while powinien być if, ponieważ jeśli  warunek zostanie spełniony to dopiero pętla wystartuje ( w tym przypadku tak nie jest )
0 głosów
odpowiedź 28 maja 2016 przez kacperdyba Gaduła (3,290 p.)
Urzyłeś operatora '=' zamiast '==' w pętli. W c++ operatorem porówania jest podwójny znak równania, natomiast pojedynczy jest operatorem przypisania.

Pozdrawiam,

Kacper
0 głosów
odpowiedź 28 maja 2016 przez roko Nowicjusz (160 p.)
Kod poprawiłem, dziękuję za szybką i rzeczową pomoc. Jednak teraz pojawił się nowy problem. Program zamiast losować, aż wylosuje liczbę podaną przez użytkownika pokazuje na ekranie liczbę jaką wylosował (a tą liczbą zawsze jest 0) i wydaje dźwięk. Coś jest nadal źle...
#include <iostream>
#include <windows.h>
#include <time.h>

using namespace std;

int liczba_usera, liczba_losowa;

int main()

{
    cout << "Witaj, podaj liczbe miedzy 3, a 30";
    cin >> liczba_usera;
    srand(time(NULL));

    while (liczba_usera == liczba_losowa);
    {
         liczba_losowa ==  (rand()+3) % 31;
        cout<<"Wylosowano Twoja liczbe:"<<liczba_losowa<<"\a";
    }

    return 0;
}

 

1
komentarz 28 maja 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)

Już lepiej lecz nadal jest źle.

#include <iostream>

#include <windows.h>

#include <time.h>



using namespace std;



int liczba_usera, liczba_losowa;



int main()

{

    srand(time(NULL)); // powinien być tu 

    cout << "Witaj, podaj liczbe miedzy 3, a 30";

    cin >> liczba_usera;

   

    do

   {

        liczba_losowa ==  (rand()+3) % 31;

        if ( liczba_losowa == liczba_usera ) {

               cout<<"Wylosowano Twoja liczbe:"<<liczba_losowa<<"\a";
             

        }

    }while (liczba_usera != liczba_losowa)



    return 0;

}

 

komentarz 28 maja 2016 przez roko Nowicjusz (160 p.)
Dzięki wielkie za pomoc! Jednak program nadal nie działa jak należy, po podaniu liczby (int liczba_usera) nic nie robi..
komentarz 28 maja 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
A skąpilowałeś to ?

Dodałeś bibliotekę cstdlib ?

Wstawiłeś średniki w odpowiednie miejsce ?

Zmieniłeś linijkę  liczba_losowa == (rand()+3) % 31; tam powino być 1x =

Podobne pytania

0 głosów
1 odpowiedź 231 wizyt
pytanie zadane 11 sierpnia 2016 w HTML i CSS przez Snich Nowicjusz (220 p.)
0 głosów
2 odpowiedzi 1,282 wizyt
pytanie zadane 2 grudnia 2017 w Offtop przez kordix Gaduła (3,910 p.)
0 głosów
4 odpowiedzi 173 wizyt

92,573 zapytań

141,423 odpowiedzi

319,648 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...