dlaczego funkcja rand()% za kazdym razem losuje to samo?

0

program z 4programmers.net

#include <stdio>
#include <stdlib>
using namespace std;
 
    enum srodekTransportu {SAMOCHOD, TRAMWAJ, AUTOBUS, ROWER, NOGI};
 
void tankuj (srodekTransportu pojazd)
{
    if ( pojazd == SAMOCHOD )
        cout<<"Samochod zatankowany do pelna!"<<endl;
    else
        cout<<"Przeciez nie jade samochodem, wiec co mam zatankowac?"<<endl;
    return;
}
 
int main (int argc, char* argv[])
{
    srodekTransportu sposob;
    sposob = SAMOCHOD;    /* wybranie sposobu dotarcia do pracy */
 
    switch (sposob)
    {
        case SAMOCHOD:
                  cout<<"Pojade dzis sobie samochodem!"<<endl;
                  break;
        case AUTOBUS: case TRAMWAJ:
                  cout<<"Skorzystam dzis z transportu publicznego!"<<endl;
                  break;
        case ROWER:
                  cout<<"Pojade dzis sobie rowerem!"<<endl;
                  break;
        default:
                  cout<<"Pojde na piechote!"<<endl;
                  break;
    }
 
    tankuj(sposob);
 
    return 0;
}

Nie rozumiem dlaczego za kazdym uruchomieniem programu wyswietlany jest ten sam tekst, rozumiem ze rand losuje za kazdym razem to samo, tak? jesli tak to dlaczego? I jak mozna zrobic zeby faktycznie losował?

0

Albom ślepy albo w kodzie ujeb... ukradło Ci UFO rand O.o

0

faktycznie, wkleiłem nie ten kod, chodziło mi o ten:

#include <stdio.h>
#include <stdlib.h>
 
    enum srodekTransportu {SAMOCHOD, TRAMWAJ, AUTOBUS, ROWER, NOGI};
 
void tankuj (enum srodekTransportu pojazd)
{
    if ( pojazd == SAMOCHOD )
        printf("Samochod zatankowany do pelna!\n");
    else
        printf("Przeciez nie jade samochodem, wiec co mam zatankowac?\n");
    return;
}
 
int main (int argc, char* argv[])
{
    enum srodekTransportu sposob;
    sposob = rand()%5;    /* losowanie sposobu dotarcia do pracy */
 
    switch (sposob)
    {
        case SAMOCHOD:
                  printf("Pojade dzis sobie samochodem!\n");
                  break;
        case AUTOBUS: case TRAMWAJ:
                  printf("Skorzystam dzis z transportu publicznego!\n");
                  break;
        case ROWER:
                  printf("Pojade dzis sobie rowerem!\n");
                  break;
        default:
                  printf("Pojde na piechote!\n");
                  break;
    }
 
    tankuj(sposob);
 
    return 0;
}

dodam ze na linuksie losuje ciągle rower, na windowsie transport publiczny

2

dlatego, że nigdzie nie inicjalizujesz generatora liczb pseudolowowych - srand((int)time(NULL));
Tylko rób to wyłącznie jeden raz na cały czas działania aplikacji

1

Funkcja rand służy do generowania liczb pseudolosowych. Każda kolejna "wylosowana" liczba zależy od poprzednich wyników. Początkowo taki generator jest zainicjowany pewną stałą wartością, co sprawia, że każda kolejna generacja jest taka sama. Generator można zainicjować za pomocą funkcji srand() przekazując do niej jakąś wartość, zwykle jest to srand(time(NULL));

0

dzieki byku_guzio, pomoglo, a Karolaq dziekuje bo dzieki Twojemu postowi zrozumialem

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