Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    51

    [c] Prog. compila con win ma non con linux

    salve, ho un problema con un esercizio di c che sto provando a fare, il programma dovrebbe servire a generare un numero di giocate che decide l'utente (compreso tra 1 e 20) del gioco del superenalotto (quindi con 6 numeri random estratti per ogni giocata), sono partito a scrivere il codice dal ciclo più interno, e quindi ho strutturato il programma per generare una sola giocata senza lasciare all'utente la scelta del numero delle stesse, e tutto sembrava andare bene e funzionare a dovere, dopo di che ho aggiunto un ultimo ciclo esterno a tutto che servisse a far girare il programma il numero di volte desiderato per generare il numero di giocate richieste dall'utente. Quando ho inserito questo ultimo ciclo sono iniziati i problemi, perchè da quel momento il programma ha smesso di funzionare correttamente sotto linux e con il compilatore codeblocks che è quello che ho usato dall'inizio dello sviluppo ed adesso ho verificato che però continua a funzionare sotto windows xp e devcpp....
    Vi allego il codice, spero possiate spiegarmi come mai questo strano strano problema. grazie.

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void genera_colonne(int giocata,int num,int *vett);
    void ordina_vett(int num_dati,int *vett);
    
    int main()
    {
    int num_giocate, numero, norm_rand, i, indice_giocate, num_dati=6;
    int vett[6];
    
    srand(time(NULL));
    printf("Inserire il numero di giocate da generare[1-20]: \n");
    scanf("%d",&num_giocate);
    printf("%d",num_giocate);
    for(indice_giocate=0;indice_giocate<num_giocate;indice_giocate++)
    {
    for (i=0;i<6;i++)
        {
            numero=rand();
            //printf("Numero casuale: %d\n",numero);
            norm_rand=numero%90;
            if(norm_rand==0)
                norm_rand=1;
            //printf("Numero normalizzato: %d\n",norm_rand);
            genera_colonne(i,norm_rand, vett);
            //printf("Numero %da colonna: %d\n",i+1,vett[i]);
        }
    
    printf("Giocata n.%d\n",indice_giocate+1);
    for (i=0;i<6;i++)
        printf("%da colonna: %d\n",i+1,vett[i]);
    ordina_vett(num_dati,vett);
    printf("\n");
    }
    return(1);
    }
    
    void genera_colonne (int giocata,int num, int *vett)
    {
    int i=0, i_esimo;
    
    while (i<num)
        {
            i++;
            i_esimo=rand()%90;
            if(i_esimo==0)
                i_esimo++;
    
        }
    vett[giocata]=i_esimo;
    
    
    }
    
    void ordina_vett(int num_dati,int *vett)
    {
    typedef enum {false,true} boolean;
    int scambio,indice,prov;
    scambio=true;
    while(scambio)
    {
        scambio=false;
        for (indice=0;indice<num_dati;indice++)
            if(vett[indice]>vett[indice+1])
                {
                    prov=vett[indice];
                    vett[indice]=vett[indice+1];
                    vett[indice+1]=prov;
                    scambio=true;
                    }
        }
    
    
    
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    225
    Oltre al codice dovresti spiegare cosa non funziona: a me compila e gira perfettamente

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    51
    ho spiegato che prima di aggiungere il ciclo for più esterno che c'è nel main compilava e girava perfettamente anche a me, sia su linux con codeblocks che su windows con devcpp, dopo che ho aggiunto quell'ultimo for compila e gira SOLO su windows e devcpp, linux va in ciclo infinito.........

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    su visual c++ senza il typedef dentro la funzione (???) compile perfettamente.. che errori ti da a te?

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    51
    ripeto..... non mi da nessun errore, se non che quando lo eseguo su linux va in ciclo infinito, mentre su windows funziona tutto come dovrebbe.... tutto qui...

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    225
    ripeto......... a me gira perfettamente (ovvero NON va in ciclo infinito).......
    (ho fedora core 7, ho compilato con l'istruzione
    codice:
    gcc pippo.c -o pippo
    )
    ......

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    In realta' questa linea

    for (indice=0;indice<num_dati;indice++)

    e' sbagliata e dovrebbe essere

    for (indice=0;indice<num_dati-1;indice++)

    Questo errore puo' essere causa della corruzione dello stack e, in modo imprevedibile, il flusso del programma ne puo' risentire.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    51
    Grazie mille oregon!!!!!!!!!!!! funziona!!!!!!!! grazie davvero!!

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Di nulla ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.