• 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

0 głosów
1,650 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,570 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,790 wizyt
0 głosów
1 odpowiedź 1,121 wizyt
pytanie zadane 9 listopada 2016 w C i C++ przez Undisputed Gaduła (3,040 p.)
0 głosów
6 odpowiedzi 1,673 wizyt
pytanie zadane 19 maja 2015 w C i C++ przez serabio Nowicjusz (180 p.)

93,607 zapytań

142,530 odpowiedzi

322,999 komentarzy

63,098 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

Kursy INF.02 i INF.03
...