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

Losowanie liczby w c++ błąd

Object Storage Arubacloud
0 głosów
1,006 wizyt
pytanie zadane 2 września 2017 w C i C++ przez Marceli99 Obywatel (1,160 p.)

Cześć, zrobiłem bardzo prosty kod w c++ na losowanie liczby z przedziału od 0 do 100, problem pojawił się przy konstrukcjach warunkowych.

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    srand( time( NULL ) );
    int a =( rand() % 100) + 0;
    int b;
    if(b != a)
    do
    {
    cout << "Wylosowalem liczbe z zakresu od 0 do 100 - zgadnij jaka to liczba: ";
    cin >> b
    if(b < a)
    {
    cout << "To za malo!";}
    if(b > a){
    cout << "To za duzo!";}
    if ((b = a-1) || (b= a+1){
    cout << "Jestes blisko! :)";}
    if ((b > 100) || (b < 100)){
    cout << "Przedzial zaczyna sie na 0, a konczy na 100";}
    } while ( b == a );
   cout << "Udalo ci sie zgadnac wlasciwa wartosc!";
}



}

 

code::blocks wyrzuca błąd - 17 error: expected ')' before '{' token

Chciałbym sam to jednak zrobić, dlatego proszę tylko o nakierowanie. :P Może źle wykonałem warunki? Czy zadziała to gdy zamiast if użyję konstrukcji switch?

1
komentarz 2 września 2017 przez criss Mędrzec (172,590 p.)
Brak średnika w 16 linii.
komentarz 2 września 2017 przez QizmoPL Stary wyjadacz (11,440 p.)
tak z innej beczki, uzywaj biblioteki random

3 odpowiedzi

0 głosów
odpowiedź 2 września 2017 przez niezalogowany
Linia 16 - brak średnika.

Linia 32 - niepotrzebna klamra zamykająca.
komentarz 2 września 2017 przez Marceli99 Obywatel (1,160 p.)

Poprawiłem błędy, program uruchomił się, ale działa... źle. :D

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    srand( time( NULL ) );
    int a =( rand() % 100) + 0;
    int b;
    if(b != a)
    do
    {
    cout << "Wylosowalem liczbe z zakresu od 0 do 100 - zgadnij jaka to liczba: ";
    cin >> b;
    if((b < a) && (b != a)){
    cout << "To za malo!";}
    if((b > a) && (b != a)){
    cout << "To za duzo!";}
    if ((b = a-1) || (b= a+1) && (b != a)){
    cout << "Jestes blisko! :)";}
    if ((b > 100) || (b < 100) && (b != a)){
    cout << "Przedzial zaczyna sie na 0, a konczy na 100";}
    } while ( b == a );
   cout << "Udalo ci sie zgadnac wlasciwa wartosc!";
}

Gdy program ma sprawdzić czy b jest dobre, mniejsze, wieksze, mniejsze o 1, wieksze o 1 to robi to wszystko na raz, wypisuje i nawet twierdzi za każdym razem że to prawidłowa liczba... :P

komentarz 2 września 2017 przez 10kw10 Pasjonat (22,880 p.)
else if
komentarz 2 września 2017 przez Marceli99 Obywatel (1,160 p.)

Teraz już działa ciut lepiej, ale nadal podczas podania liczby do programu wyświetla się wynik

np. To za mało, odgadąłeś właściwą liczbę - zachodzą zawsze dwa warunki naraz. :P Dodatkowo pętla nie działa, bo program się kończy. :(

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    srand( time( NULL ) );
    int a =( rand() % 100) + 0;
    int b;
    if(b != a)
    do
    {
    cout << "Wylosowalem liczbe z zakresu od 0 do 100 - zgadnij jaka to liczba: ";
    cin >> b;
    if((b < a) && (b != a)){
    cout << "To za malo!";}
    else if((b > a) && (b != a)){
    cout << "To za duzo!";}
    else if ((b == a-1) || (b == a+1) && (b != a)){
    cout << "Jestes blisko! :)";}
    else if ((b > 100) || (b < 100) && (b != a)){
    cout << "Przedzial zaczyna sie na 0, a konczy na 100";}
    } while ( b == a );
   cout << "Udalo ci sie zgadnac wlasciwa wartosc!";
}

 

komentarz 2 września 2017 przez 10kw10 Pasjonat (22,880 p.)
co robi ten if przed do w 12 linii ? ehh Ogladaj te filmiki Zelenta uwaznie plz ;/
komentarz 2 września 2017 przez Marceli99 Obywatel (1,160 p.)
Jestem dopiero na 2 odcinku. :( Jeżeli b nie jest równe a to w pętli aż do skutku sprawdzaj następujące warunki dopóki b = a tak to sobie wyobrażam, zamiast rozpaczać, wytłumacz mi dlaczego ten if nie powinien być w 12 linii, bo nie pomagasz, a jedynie demotywujesz. Jak zrozumiem błąd w działaniu tego programu to wyjdzie mi to na + w przyszłości. Próbuję się nauczyć i to wyklucza bycie biegłym.
komentarz 2 września 2017 przez 10kw10 Pasjonat (22,880 p.)
to ogladnij 3 o petlach i sam sie dowiesz.
komentarz 2 września 2017 przez Marceli99 Obywatel (1,160 p.)

OK, obejrzałem - faktycznie zwracam ci honor, wystarczyło użyć innej pętli, teraz już działa z pominięciem dwóch ostatnich warunków, może istnieć tylko jeden else if?

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    srand( time( NULL ) );
    int a =( rand() % 100) + 0;
    int b;
    if(b != a)
    while (a != b){
    cout << "Wylosowalem liczbe z zakresu od 0 do 100 - zgadnij jaka to liczba: ";
    cin >> b;
    if((b < a) && (b != a)){
    cout << "To za malo! ";}
    else if((b > a) && (b != a)){
    cout << "To za duzo! ";}
    else if ((b == a-1) || (b == a+1) && (b != a)){
    cout << "Jestes blisko! :) ";}
    else if ((b > 100) || (b < 100) && (b != a)){
    cout << "Przedzial zaczyna sie na 0, a konczy na 100 ";}
    }
   cout << "Udalo ci sie zgadnac wlasciwa wartosc!";
}

Bowiem warunek sprawdzający czy liczba jest blisko tej szukanej nie działa, ostatni warunek także nie i dodatkowo na jakiej zasadzie użyć dzielenia modulo aby przedział był od 0 do 100? Kolega wyżej napisał że mój program ma przedział od 0 do 99 :D

komentarz 2 września 2017 przez 10kw10 Pasjonat (22,880 p.)
Dalej sie czepie tego ifa :D Sprobuj bez niego. Dziala? No wlasnie. Lepiej by tez bylo jakybs do b przypisal jakas wartosc najlepiej z poza zakresu, zeby nie zdazylo sie tak ze juz na starcie a==b, bo teraz b przyjmuje randomowa wartosc i moze sie tak stac.

2 ostatnie else ify nigdy sie nie spelnia, bo zawsze bedzie albo za malo albo za duzo albo trafiles. Proponowalbym bym ci inna kolejnosc tych warunkow.

Teraz jak jest z tym modulo:

rand() % ( ile jest liczb w przedziale) + ( poczatkowa wartosc) ;

W twoim przypadku bd to rand()% 101 + 0;
0 głosów
odpowiedź 2 września 2017 przez unknown Nałogowiec (39,560 p.)
Linia 22 przypisanie zamiast porównania
0 głosów
odpowiedź 2 września 2017 przez L33TT12 Gaduła (3,950 p.)
Linia 22 dodatkowo brak nawiasu przed {, oraz to jest losowanie od 0 do 99, jak chcesz to 100 to daj modulo 101.

Podobne pytania

0 głosów
1 odpowiedź 1,453 wizyt
0 głosów
1 odpowiedź 1,010 wizyt
pytanie zadane 9 listopada 2016 w C i C++ przez Undisputed Gaduła (3,040 p.)
0 głosów
6 odpowiedzi 1,245 wizyt
pytanie zadane 19 maja 2015 w C i C++ przez serabio Nowicjusz (180 p.)

92,579 zapytań

141,427 odpowiedzi

319,653 komentarzy

61,961 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!

...