Gå til innhold

Få funksjon med lik input til å kjøre flere ganger


Gjest Slettet-uHVgFQ

Anbefalte innlegg

Gjest Slettet-uHVgFQ

Jeg lagde en funksjon som ser slik ut:

char randomChar(int x){
srand(time(0));
int bokstavnr=rand()%x+65;
char bokstav=(char)bokstavnr;
return(bokstav);
}

Den skal ta inn et tall som bestemmer domenet med bokstaver som den kan gi ut. Hvis x=5 gir svaret en bokstav mellom A og E. Problemet er at hvis jeg kaller på funksjonen flere ganger med samme verdi for x gir den samme bokstav tilbake som tidligere. Det virker for meg som om den ikke gidder kjøre funksjonen flere ganger fordi den fra tidligere vet hvilken output som gjelder for funksjonen. Hvordan tvinger jeg funksjonen til å kjøre på nytt, evt. hvordan kan jeg gjøre slik at programmet som kjører funksjonen får forskjellig bokstav for hver gang funksjonen kjøres?

Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet-uHVgFQ

Flytt srand ut fra funksjonen og kjør den kun en gang i programmet ditt.

 

What sorcery is this?

Kan du forklare hvorfor det er sånn?

 

EDIT: Og et noobspm: Jeg skal ha en array som inneholder output som følge av funksjonen over.

 

F.eks. char tabell[4]={randomChar(5),randomChar(5),randomChar(5),randomChar(5)};

Si at denne tabellen skal ha mange verdier, finnes det en enklere måte å skrive at alle verdiene skal være like, uten å bruke løkke eller copy/paste?

Endret av Slettet-uHVgFQ
Lenke til kommentar

Random er ikke tilfeldig. Kort fortalt er velger den et tall fra en liste hvor tallene regner for å ligge i en tilfeldig rekkefølge. Denne listen vil ALLTID være lik, gitt at du er på samme datamaskin og bruker samme random-bibliotek.

 

Srand-funksjonen (seeding) forteller bare hvor i denne listen du skal begynne å velge tall fra. Når du da kjører følgende kode:

        srand(time(0));
       int bokstavnr=rand()%x+65;

sier du kort:

 

Gå til posisjon X i listen

Velg et tilfeldig tall

 

Når du da kjører dette i en løkke blir det:

 

Gå til posisjon X i listen

Velg et tilfeldig tall

Gå til posisjon X i listen

Velg et tilfeldig tall

Gå til posisjon X i listen

Velg et tilfeldig tall

....

 

Du ser her at siden du alltid går tilbake til samme posisjon i tall-listen blir det slik. (med mindre time(0) endrer seg, noe den ikke gjør før funksjonen har rukket å kjørt veldig mange ganger)

 

char tabell[4]={randomChar(5)};

 

Skal sette alle verdiene til samme verdi, i hvertfall i C med GCC

Lenke til kommentar
Gjest Slettet-uHVgFQ

Takk skjønte det med srand nå. Jeg bruker visual c++ express, og hvis jeg skriver char tabell[4]={randomChar(5)} så setter den randomChar(5) til den første plassen, mens resten av plassene er tomme(holdes av til fremtidige verdier).

Lenke til kommentar

Takk skjønte det med srand nå. Jeg bruker visual c++ express, og hvis jeg skriver char tabell[4]={randomChar(5)} så setter den randomChar(5) til den første plassen, mens resten av plassene er tomme(holdes av til fremtidige verdier).

Okey, C++ du bruker (kanskje du sa det tidliggere, men jeg så det ikke)

 

char array[5];
std::fill_n(array, 5, randomChar(5));

Endret av etse
Lenke til kommentar

(...) og hvis jeg skriver char tabell[4]={randomChar(5)} så setter den randomChar(5) til den første plassen, mens resten av plassene er tomme(holdes av til fremtidige verdier).

 

Nei, de er ikke tomme, de er defaultinitialisert for den aktuelle typen ('\0' i dette tilfellet).

Endret av zotbar1234
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...