Permalänk
Medlem

Random i C, snälla hjälp.

Jag ska göra ett proram som låter en gissa mellan 0 och 100, det jag har problem med är att jag inte lyckas generera ett helt random nummer utan att det alltid blir noll, snälla hjälp mig.

time_t t;

time(&t);
srand((unsigned int)t);

random=i*((double)rand()/(double)RAND_MAX+(double)1);
random=rand()%i+1;
random=i*(rand()/RAND_MAX+1);
random=(unsigned int)i*((double)rand()/(double)RAND_MAX+(double)1);
int random = rand() % i + 1;

dom jag har testat, inga fungerar.

Mvh Joakim

Permalänk
Medlem

rand() % 101

Visa signatur

AMD Mobile 2400+ @ 2300 Mhz (11,5x200) 1,625 V, Gf4 Ti 4200 @ 360/760, 512mb SP bh-5, Vmodds, vatten och TEC på gpu.

Permalänk
Medlem

varför skulle det funka om inte rand()%100 funkar ända skillnaden borde väll vara att det blir mellan 0-99 eller 0-100. Problemet är att det helt enkelt alltid blir noll. Jag har i för att man ska kunna välja vilket intervall man vill ha, har till 100 som standard.

Permalänk
Medlem

Du sätter aldrig variablen i. Testa följande kod:

srand(time(NULL)); int random = rand() % 101;

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk

Testa om detta fungerar.

include <stdio.h> int main(int argc, char **argv) { time_t t; time(&t); srand((unsigned int)t); printf("%d", rand()%101); return 0; }

Du har något konstigt 'i' överallt i din kod. Vad gör den där?

Permalänk
Medlem

så här ser det ut. random fungerar inte

#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void){ typedef int bool; int i, random, gissat, rakning; int rand(void); bool running, gissatRatt, svarat; time_t t; time(&t); srand((unsigned int)t); running=1; i=100; while(running){ char svar; //random=i*((double)rand()/(double)RAND_MAX+(double)1); //random=rand()%i+1; //random=i*(rand()/RAND_MAX+1); //random=(unsigned int)i*((double)rand()/(double)RAND_MAX+(double)1); //int random = rand() % i + 1; gissatRatt=0; rakning=0; gissat=-1; svarat=0; printf("Gissa ett tal mellan 0 och %d: ", i); while(!gissatRatt){ rakning++; scanf("%d", &gissat); if(gissat>>random){ printf("\n\nDin gissning är för stor\n\n"); printf("Gör en ny gissning: "); } else if(gissat<<random){ printf("Din gissning är för liten\n\n"); printf("Gör en ny gissning: "); } else{ printf("Du gissade rätt, det tog %d gissningar", rakning); gissatRatt=1; } } while(!svarat){ printf("\n\nVill du köra en gång till? (J/N): "); scanf("%c", &svar); if(svar=='n' || svar=='N'){ running=0; svarat=1; } else if (svar=='j' || svar=='J'){ i=i*2; svarat=1; } } } printf("Game Over"); }

Permalänk

Du har ju kommenterat ut dina slumpfunktioner. Och vad du försöker göra här vet jag inte:

gissat>>random

Använd > och < istället.

Visa signatur

System.out.print(madness ? this.is.SPARTA : "");

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Joqe_04
så här ser det ut. random fungerar inte

#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void){ typedef int bool; int i, random, gissat, rakning; int rand(void); bool running, gissatRatt, svarat; time_t t; time(&t); srand((unsigned int)t); running=1; i=100; while(running){ char svar; //random=i*((double)rand()/(double)RAND_MAX+(double)1); //random=rand()%i+1; //random=i*(rand()/RAND_MAX+1); //random=(unsigned int)i*((double)rand()/(double)RAND_MAX+(double)1); //int random = rand() % i + 1; gissatRatt=0; rakning=0; gissat=-1; svarat=0; printf("Gissa ett tal mellan 0 och %d: ", i); while(!gissatRatt){ rakning++; scanf("%d", &gissat); if(gissat>>random){ printf("\n\nDin gissning är för stor\n\n"); printf("Gör en ny gissning: "); } else if(gissat<<random){ printf("Din gissning är för liten\n\n"); printf("Gör en ny gissning: "); } else{ printf("Du gissade rätt, det tog %d gissningar", rakning); gissatRatt=1; } } while(!svarat){ printf("\n\nVill du köra en gång till? (J/N): "); scanf("%c", &svar); if(svar=='n' || svar=='N'){ running=0; svarat=1; } else if (svar=='j' || svar=='J'){ i=i*2; svarat=1; } } } printf("Game Over"); }

De två huvudskälen till att programmet inte fungerar är nog följande:
1. Du har kommenterat ut raden "random = rand() % i + 1"
2. "<<" och ">>" är inte jämförelser utan skiftoperationer. Det du vill använda är "<" respektive ">".

Permalänk
Medlem

jag föröker få programmet att avgöra ifall talet man gissade är för stort eller för litet.

Permalänk
Medlem

....
const int max = 100;
time_t sec;
int random;

time(&sec);
srand((unsigned int) sec);
random = rand() % max;
printf("random: %d\n", random);
....

Funkar bra...

Visa signatur

E6600 2.4GHz @ 3.2GHz | 4GB 800MHz DDR2 | X1950XTX 512MB @ 695MHz GPU, 2.2GHz mem | WD Raptor | Asus P5B-E | 600W CT600 | FreeBSD & Vista Dual boot
IBM Thinkpad 560X - OpenBSD | Fujitsu Siemens Amilo D - FreeBSD | PSP 4.01-M33 | WRT54GL OpenWRT Kamikaze | iPhone | IMS/SS7 Developer

Permalänk

#include <time.h> #include <stdio.h> #include <stdlib.h> int main ( int argc, char **argv ) { srand ( (unsigned int)time ( NULL ) ); int random = rand ( ) % 101; printf ( "Random: %d", random ); return 0; }

Det borde fungera hur bra som helst.

Permalänk
Citat:

Ursprungligen inskrivet av Elgot
De två huvudskälen till att programmet inte fungerar är nog följande:
1. Du har kommenterat ut raden "random = rand() % i + 1"
2. "<<" och ">>" är inte jämförelser utan skiftoperationer. Det du vill använda är "<" respektive ">".

Känns som att det var ganska precis vad jag sa

Visa signatur

System.out.print(madness ? this.is.SPARTA : "");

Permalänk

rand()%99+1

Så brukar jag köra, borde fungera?

Visa signatur

Citera, tack!
Har du läst tråden om strandhögtalare och andra musiklådor?

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Ghost_Overdoze
Känns som att det var ganska precis vad jag sa

Och det känns som att jag skrev det ganska precis samtidigt som du