View Full Version : [C] Numero casuale con C
Madchemist
10-10-2007, 06:36
Buongiorno, sono nuovo di qui, molti mi conoscono negli altri forum come Madchemist, ho 13 anni e sono un "appassionato" di programmazione, ovviamente non è che io possa sapere molto, pertanto vi chiedo di spiegarmi le cose come le spieghereste a vostra nonna.
Sono più ferrato sui linguaggi di programmazione per il web (html, php, Js) e sui linguaggi di programmazione per i microntrollori (assembler), sono abbastanza astemio di linguaggi come il C e il VB6 e il Perl.
Cmq la mia domanda è...
Come si ottiene un numero casuale con C?
Devi utilizzare la funzione rand();
#include <stdio.h>
#include <time.h>
int main(){
srand(time(NULL)); // inizializzo il timer casuale.
printf("Rand function: %d", rand()%6);
return 0;
}
Madchemist
14-10-2007, 06:18
Ti ringrazio.:)
Scusa se sono insistente, ma non riesco a compilare.
Il compilatore mi segna errore su questa riga:
srand(time(NULL)); // inizializzo il timer casuale.
Cos' è che non va?
Grazie per l' attenzione.
fracarro
14-10-2007, 08:07
Ti ringrazio.:)
Scusa se sono insistente, ma non riesco a compilare.
Il compilatore mi segna errore su questa riga:
srand(time(NULL)); // inizializzo il timer casuale.
Cos' è che non va?
Grazie per l' attenzione.
Prova ad aggiungere la libreria stdlib.h ;)
L'esempio portato dall'utente dad_89 per la generazione di numeri casuali non e' ottimale, la spiegazione del motivo e' disponibile nell'ottima guida, presente in questo stesso forum, dell'utente Ziosilvio: http://www.hwupgrade.it/forum/showthread.php?t=1196677
Nota per il moderatore: Perche' tale guida non e' in rilievo (potrei pero' non averla trovata io, nel qual caso non considerare questa nota), l'ho dovuta cercare con Google.
Madchemist
14-10-2007, 20:23
OK, risolto l' arcano mistero, grazie a tutti.
Bisognava aggiungere la libreria (grazie fracarro):
#include <stdlib.h>
Inoltre ci voleva anche:
system ("pause");
sennò appena appare il numero la finestrina si chiude...
GRAZIE A TUTTI.
EDIT: Stresso ancora, come faccio a mettere il risultato casuale in una variabile?
Ziosilvio
15-10-2007, 09:47
Nota per il moderatore: Perche' tale guida non e' in rilievo (potrei pero' non averla trovata io, nel qual caso non considerare questa nota), l'ho dovuta cercare con Google.
Forse perché dovrei aggiornarla... non parlo né di test statistici per misurare la bontà di un generatore, né di RNG in altri linguaggi tipo Java o Python, né (mancanza oggi abbastanza grave) del Mersenne Twister...
Madchemist
15-10-2007, 13:52
Scusate come faccio a mettere il risultato casuale in una variabile?
marko.fatto
15-10-2007, 14:22
int variabile;
variabile=rand()%6;
OK, risolto l' arcano mistero, grazie a tutti.
Bisognava aggiungere la libreria (grazie fracarro):
#include <stdlib.h>
Inoltre ci voleva anche:
system ("pause");
sennò appena appare il numero la finestrina si chiude...
GRAZIE A TUTTI.
EDIT: Stresso ancora, come faccio a mettere il risultato casuale in una variabile?
system("pause"); è una chiamata di sistema ad una funzione dos, di questo tipo di funzioni è altamente sconsigliato l'utilizzo, perchè essenzialmente rendono il fattore "portabilità" a 0.
system("pause"); è una chiamata di sistema ad una funzione dos, di questo tipo di funzioni è altamente sconsigliato l'utilizzo, perchè essenzialmente rendono il fattore "portabilità" a 0.
quoto.. puoi sostituirla con una getchar() che è standard quindi portabile.
estrosos
16-10-2007, 07:51
scusate leggo ora....ma per fermare il programma in quel punto anzikè con system("pause") utilizzando una getchar() cm si usa?...perkè a me hanno sempre insegnato così...
Ziosilvio
16-10-2007, 12:19
per fermare il programma in quel punto anzikè con system("pause") utilizzando una getchar() cm si usa?
In realtà basterebbe lanciare l'eseguibile da console, invece di usare la voce "Run" dal menu dell'IDE.
Comunque, si può anche fare così, e terminare il programma con la pressione di Invio:
/* prima si pulisce lo standard input */
while (getchar() != EOF)
;
/* poi si aspetta la pressione di Invio */
while (getchar() != '\n')
;
estrosos
17-10-2007, 09:30
grazie...ho imparato una cosa nuova...;)
Ziosilvio
20-10-2007, 10:50
ERRATA CORRIGE
/* prima si pulisce lo standard input */
while (getchar() != EOF)
;
Ripensandoci: credo di aver detto una sciocchezza.
Adesso non riesco a ricordare se getchar può restituire EOF anche quando stdin è associato alla tastiera.
Comunque, alla peggio, si può usare due volte la rilevazione del newline, anziché una volta EOF e la volta dopo newline.
Oppure, si toglie la bufferizzazione allo standard input; ma questo si fa in modi diversi su sistemi operativi diversi (e io non so come :().
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.