Errore in C

di il
13 risposte

Errore in C

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* La mia funzione */
int lancio(int a, int b, int c)
{
srand(time(0));
int d, e, f;
d = 1 + (rand() % 6);
e = 1 + (rand() % 6);
f = 1 + (rand() % 6);
printf ("Il giocatore 1 ha lanciato un %d\n", d);
printf ("Il giocatore 2 ha lanciato un %d\n", e);
printf ("Il giocatore 3 ha lanciato un %d\n", f);
}

/* inizia il main() */

main()
{
int a, b, c, max;                                  /* Inizializzazione variabili*/

lancio (a, b, c);                                   /* la mia funzione viene richiamata */
           max = a;
if (max >= b)
           max = b;
if (max >= c)
           max = c;
printf("il valore piu' alto e' %d", max);
return 0;
}
Ho creato la funzione lancio. in un programma che sto creando io, non riesco a capire come mai mi viene come risultato il valore di 78 ( il valore piu' alto e' 78 ). Dove starebbe l'errore secondo voi ?

13 Risposte

  • Re: Errore in C

    Cos'è min? perche a,b,c,max non sono inizializzati? Perche fai una funzione con passaggio parametri per valore se i volori dei parametri non sono stati inizializzati? Dopo l'uscita della funzione a,b,c avrano il valore aggiornato. Perche passi 3 valori alla funzione lancio se poi non ne utilizzi nessuno?

    Vuoi altre domande?
  • Re: Errore in C

    Scusa skynet ho attualizzato, mi ero sbagliato perchè all'inizio avevo chiamato la variabile max, min, l'ho cambiato perchè cercavo il numero minimo, non il massimo. Ora dovrebbe essere giusto credo.
    Cmq il problema persiste esce sempre 78.

    A, b, c ,max sono inizializzati dentro il main()
  • Re: Errore in C

    Oh aspe forse ho capito, provo na cosa
  • Re: Errore in C

    No nulla, cosa sbaglio ? Mi esce sempre il solito 78
  • Re: Errore in C

    
    //passaggio per valore
    int lancio(int a, int b, int c)
    
    
    //passaggio per riferimento
    int lancio(int *a, int *b, int *c)
    
    
    int a,b,c; //valori non inizializzati
    int a = 0, b = 0, c = 0; // valori inizializzati
    
  • Re: Errore in C

    Il tuo codice corretto. STUDIALO.
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    /* La mia funzione */
    int lancio(int *a, int *b, int *c)
    {
    srand(time(0));
    
    *a = 1 + (rand() % 6);
    *b = 1 + (rand() % 6);
    *c = 1 + (rand() % 6);
    printf ("Il giocatore 1 ha lanciato un %d\n", *a);
    printf ("Il giocatore 2 ha lanciato un %d\n", *b);
    printf ("Il giocatore 3 ha lanciato un %d\n", *c);
    }
    
    /* inizia il main() */
    
    main()
    {
    int a = 0, b = 0, c = 0, max = 0;                                  /* Inizializzazione variabili*/
    
    lancio (&a, &b, &c);                                   /* la mia funzione viene richiamata */
               max = a;
    if (max >= b)
               max = b;
    if (max >= c)
               max = c;
    printf("il valore piu' alto e' %d", max);
    return 0;
    }
    
  • Re: Errore in C

    Ancora non studio i puntatori, cmq grazie skynet
  • Re: Errore in C

    Sto provando e riprovando ma mi serve questo programma con passaggio per valore, non per riferimento. E' possibile farlo col passaggio di valore ? Qualcuno potrebbe correggermelo in modo che funzioni così da potermelo studiare per benino ? Grazie

    cmq inizializzando i valori a=0, b=0 c=0, mi esce sempre 0.
  • Re: Errore in C

    
    int lancio()
    {
       return (1 + (rand() % 6));
    }
    
    
    int main()
    {
    srand(time(0));
    int a = 0, b = 0, c = 0, max = 0;                                  /* Inizializzazione variabili*/
    
    a = lancio();
    printf ("Il giocatore 1 ha lanciato un %d\n", a);
    b = lancio();
    printf ("Il giocatore 2 ha lanciato un %d\n", b);
    c = lancio();
    printf ("Il giocatore 3 ha lanciato un %d\n", c);
    
               max = a;
    if (max <= b)
               max = b;
    if (max <= c)
               max = c;
    printf("il valore piu' alto e' %d", max);
    return 0;
    }
    
  • Re: Errore in C

    Si vede chi è Elite e chi no come me. Hai semplificato la funzione, non sapevo si potesse creare una funzione int lancio() senza nessun valore alcuno dentro le parentesi, ma ho letto poco fa che quando non ce valore il computer da per scontato che si tratta di un intero.
    Quindi le variabili vanno inizializzate sempre e comunque se ho capito bene.
    Ma il "Return + formula" è obbligatoria in qualsiasi funzione creata ?
  • Re: Errore in C

    La funzione è creata come
    
    int lancio(void);
    
    restituisci un intero e non prendere nessun valore in ingresso quindi il return ci stà se no cosa ritorni?
    la funzione può essere scritta anche così
    
    int lancio()
    {
       int valore = 0;
       valore = 1 + (rand() % 6);
       return valore;
    }
    
    Secondo te qual'è + efficace? la prima versione perche non crei varibili temporanee a vuoto. Cmq per sicurezza SEMPRE inizializzare i valori così non hai sorprese come ti è accaduto che ti usciva 78. Se lo provavo io mi usciva un altro numero (tutto dipende da cosa contiene la cella dove sta la variabile).
    quando non ce valore il computer da per scontato che si tratta di un intero
    ERRATO. il computer non da per scontato proprio niente. il quel caso lui non aspetta nessun valore in ingresso quindi non si lascia niente al caso. il return ritorna un int perche rand() è definito come:
    
    int rand ( void );
    
    e come vedi anche rand() non accetta valori ma ti ritorna un intero.
  • Re: Errore in C

    Un bel grazie grosso grosso per la tua pazienza e gentilezza.
  • Re: Errore in C

    Figurati, importante che capisci le cose nel modo giusto e non andare per deduzioni errate.
Devi accedere o registrarti per scrivere nel forum
13 risposte