Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [Progetto] Tombola: problema array di struct
Forum - C/C++ - [Progetto] Tombola: problema array di struct

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
WildBlood (Normal User)
Rookie


Messaggi: 58
Iscritto: 17/02/2015

Segnala al moderatore
Postato alle 16:35
Martedì, 07/07/2015
Ciao, ho un problema con il passaggio di parametri di un array di struct: dopo averlo dichiarato nel main devo passarlo ad una procedura posta in un altro file, ma mi da un errore : unknown type name Players.
Il codice è questo:
-main,
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include "mia_libreria.h"
  5. enum Vincite {Ambo,Terno,Quaterna,Quintina,Tombola};
  6. typedef enum {false, true} Bool;
  7.  
  8.  
  9. struct player{
  10.     char nome[20];
  11.     unsigned short cartella[3][5];
  12.     unsigned int caselle_mancanti;
  13. };
  14.  
  15. typedef struct player Players;
  16.  
  17.  
  18.  
  19.  
  20. int main()
  21. {
  22.     Players giocatori[5];
  23.     int numero_giocatori = 5,i;
  24.  
  25.     puts("INSERIMENTO DEI NOMI DEI PARTECIPANTI");
  26.     for(i=0;i<numero_giocatori;i++){
  27.         printf("\tGiocatore %d: ",i+1);
  28.         gets(giocatori[i].nome);
  29.         fflush(stdin);
  30.     }
  31.  
  32.     printf("\n\n\n");
  33.     srand(time(NULL));
  34.     genera_cartelle(giocatori,numero_giocatori);
  35.  
  36.     visualizza_cartelle(giocatori,numero_giocatori);
  37.  
  38.     printf("INIZIO ESTRAZIONE NUMERI: PARTE IL GIOCO\n");
  39.     estrazione_numeri(giocatori,numero_giocatori);
  40.  
  41.     return 0;
  42. }


-ecco una delle funzioni:
Codice sorgente - presumibilmente C++

  1. void estrazione_numeri(Players *g, int num_gioc){
  2.     int numeri[90] ={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
  3.                     31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,
  4.                     61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90};
  5.     int estrazioni = 0, indice_estratto, numero_estratto,i,k,j;
  6.     int colonna_da_scrutare;
  7.     int contatore; // servirà nel verificare se un giocatore abbia fatto terno o quaterna
  8.     enum Vincite vincite = Ambo;
  9.     Bool verifica = false;
  10.  
  11.     do{
  12.         printf("Estrazione numero %d. ", estrazioni+1);
  13.         indice_estratto = rand()%(90 - estrazioni);
  14.         numero_estratto = numeri[indice_estratto];
  15.         estrazioni++;
  16.         printf("Numero estratto: %d\n", numero_estratto);
  17.  
  18.         for(i=indice_estratto;i<90-estrazioni;i++)
  19.             numeri[i] = numeri[i+1];
  20.  
  21.         if(numero_estratto >= 1 && numero_estratto <= 18)
  22.             colonna_da_scrutare = 0;
  23.         else if(numero_estratto >= 19 && numero_estratto <= 36)
  24.             colonna_da_scrutare = 1;
  25.         else if(numero_estratto >= 37 && numero_estratto <= 54)
  26.             colonna_da_scrutare = 2;
  27.         else if(numero_estratto >= 55 && numero_estratto <= 72)
  28.             colonna_da_scrutare = 3;
  29.         else if(numero_estratto >= 73 && numero_estratto <= 90)
  30.             colonna_da_scrutare = 4;
  31.  
  32.         for(i=0;i<num_gioc;i++){
  33.             k = 0;
  34.             do{
  35.                 if(g[i].cartella[k][colonna_da_scrutare] == numero_estratto){
  36.                     g[i].cartella[k][colonna_da_scrutare] = 0;
  37.                     g[i].caselle_mancanti--;
  38.  
  39.                     if(estrazioni >= 2){
  40.                         switch(vincite){
  41.                             case Ambo:
  42.                                 for(j=0;j<5;j++){
  43.                                     if((j!=colonna_da_scrutare && g[i].cartella[k][j] == 0) ||
  44.                                         (j!=k && j<3 && g[i].cartella[j][colonna_da_scrutare] == 0)){
  45.                                             printf("\n%s fa Ambo !\n", g[i].nome);
  46.                                             visualizza_cartelle(g,num_gioc);
  47.                                             printf("\n\n");
  48.                                             vincite++;
  49.                                             break;
  50.                                     }
  51.                                 }
  52.                                 break;
  53.  
  54.                             case Terno:
  55.                                 contatore = 1;
  56.                                 for(j=0;j<5;j++){
  57.                                     if(g[i].cartella[k][j] == 0 && j != colonna_da_scrutare){
  58.                                         contatore++;
  59.                                     }
  60.                                     if(contatore == 3){
  61.                                         printf("\n%s fa Terno !\n", g[i].nome);
  62.                                         visualizza_cartelle(g,num_gioc);
  63.                                         printf("\n\n");
  64.                                         vincite++;
  65.                                         break;
  66.                                     }
  67.                                 }
  68.  
  69.                                 if(g[i].cartella[0][colonna_da_scrutare] +
  70.                                    g[i].cartella[1][colonna_da_scrutare] +
  71.                                    g[i].cartella[2][colonna_da_scrutare] == 0){
  72.                                         printf("\n%s fa Terno !\n", g[i].nome);
  73.                                         visualizza_cartelle(g,num_gioc);
  74.                                         printf("\n\n");
  75.                                         vincite++;
  76.                                         break;
  77.                                 }
  78.                                 break;
  79.                             case Quaterna:
  80.                                 contatore = 1;
  81.                                 for(j=0;j<5;j++){
  82.                                     if(g[i].cartella[k][j] == 0 && j != colonna_da_scrutare){
  83.                                         contatore++;
  84.                                     }
  85.                                     if(contatore == 4){
  86.                                         printf("\n%s fa Quaterna ! - Riga %d \n", g[i].nome,k);
  87.                                         visualizza_cartelle(g,num_gioc);
  88.                                         printf("\n\n");
  89.                                         vincite++;
  90.                                         break;
  91.                                     }
  92.                                 }
  93.                                 break;
  94.                             case Quintina:
  95.                                 if((g[i].cartella[k][0] + g[i].cartella[k][1] + g[i].cartella[k][2] + g[i].cartella[k][3] + g[i].cartella[k][4]) == 0){
  96.                                         printf("\n%s fa Quintina! \n", g[i].nome);
  97.  
  98.                                         visualizza_cartelle(g,num_gioc);
  99.                                         printf("\n\n");
  100.  
  101.                                         vincite++;
  102.                                 }
  103.                                 break;
  104.                             case Tombola:
  105.                                 if(g[i].caselle_mancanti == 0){
  106.                                         printf("\n%s fa TOMBOLA!!! \n", g[i].nome);
  107.  
  108.                                         visualizza_cartelle(g,num_gioc);
  109.                                         printf("\n\n");
  110.  
  111.                                         verifica = true;
  112.                                 }
  113.                                 break;
  114.                         }
  115.                     }
  116.                     break;
  117.                 }
  118.                 k++;
  119.  
  120.             }while(k<3);
  121.  
  122.             if(verifica == true)
  123.                 break;
  124.         }
  125.     system("PAUSE");
  126.     }while( verifica == false);
  127.  
  128. }



Grazie a tutti in anticipo.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:14
Martedì, 07/07/2015
Le funzioni dove stanno? Dicci come è organizzato il progetto, i file .cpp e i .h

Ultima modifica effettuata da nessuno il 07/07/2015 alle 17:15


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
WildBlood (Normal User)
Rookie


Messaggi: 58
Iscritto: 17/02/2015

Segnala al moderatore
Postato alle 17:20
Martedì, 07/07/2015
Queste sono le altre funzioni:
Codice sorgente - presumibilmente C++

  1. void genera_cartelle(Players *g, int num_gioc){
  2.     int i,j,k;
  3.  
  4.     for(i=0;i<num_gioc;i++){
  5.         g[i].caselle_mancanti = 15;     //inizializzo il numero di caselle da puntare necessario per fare tombola
  6.         for(j=0;j<5;j++){
  7.             for(k=0;k<3;k++){
  8.                  switch(k){
  9.                      case 0:
  10.                         g[i].cartella[k][j] = ( 1+ (18*j)) + rand()%6;
  11.                         break;
  12.  
  13.                      case 1:
  14.                          do{
  15.                             g[i].cartella[k][j] = ( 7+ (18*j)) + rand()%6;
  16.                          }while(g[i].cartella[k][j] == g[i].cartella[k-1][j]);
  17.                          break;
  18.  
  19.                      case 2:
  20.                          do{
  21.                             g[i].cartella[k][j] = ( 13 + (18*j)) + rand()%6;
  22.                          }while((g[i].cartella[k][j] == g[i].cartella[k-1][j] || g[i].cartella[k][j] == g[i].cartella[k-2][j]));
  23.                          break;
  24.                  }
  25.             }
  26.  
  27.         }
  28.  
  29.     }
  30. }



Codice sorgente - presumibilmente C/C++

  1. void visualizza_cartelle(Players *g, int num_gioc){
  2.     int i,j,k;
  3.     for(i=0;i<num_gioc;i++){
  4.             printf("Cartella di %s:\n",g[i].nome);
  5.             for(k=0;k<3;k++){
  6.                 for(j=0;j<5;j++){
  7.                     printf("\t%hu",g[i].cartella[k][j]);
  8.                 }
  9.                 printf("\n");
  10.             }
  11.             printf("\n\n");
  12.     }
  13. }




Codice sorgente - presumibilmente C++

  1. #ifndef MIA_LIBRERIA_H_INCLUDED
  2. #define MIA_LIBRERIA_H_INCLUDED
  3. void genera_cartelle(Players *g, int num_gioc);
  4. void visualizza_cartelle(Players *g, int num_gioc);
  5. void estrazione_numeri(Players *g, int num_gioc);
  6.  
  7.  
  8. #endif // MIA_LIBRERIA_H_INCLUDED


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:37
Martedì, 07/07/2015
Ti avevo chiesto come è organizzato il progetto ...

Hai un file MIALIBRERIA.h

e poi?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
WildBlood (Normal User)
Rookie


Messaggi: 58
Iscritto: 17/02/2015

Segnala al moderatore
Postato alle 17:49
Martedì, 07/07/2015
In che senso come è organizzato? Ti ho mandato tutti i file del progetto.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:53
Martedì, 07/07/2015
Ce l'hanno un nome questi file?

Le funzioni stanno nello stesso file del main? O no?

E' una cosa complicata quella che chiedo?

Ultima modifica effettuata da nessuno il 07/07/2015 alle 17:54


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
WildBlood (Normal User)
Rookie


Messaggi: 58
Iscritto: 17/02/2015

Segnala al moderatore
Postato alle 18:10
Martedì, 07/07/2015
Ovviamente si: genera_cartelle, visualizza_cartelle, estrazione_numeri.
Ogni file ha lo stesso nome della procedura, come puoi notare. Sono funzioni diverse in file diversi.

Ultima modifica effettuata da WildBlood il 07/07/2015 alle 18:10
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5461
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:15
Martedì, 07/07/2015
Un file .cpp per ogni funzione? Non ha molto senso ... Allora per progetti con 1000 funzioni fai 1000 file?

In ogni caso, la struct e la typedef vanno in un file .h che devi includere in ogni file sorgente .cpp


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
WildBlood (Normal User)
Rookie


Messaggi: 58
Iscritto: 17/02/2015

Segnala al moderatore
Postato alle 18:29
Martedì, 07/07/2015
Ho risolto grazie.
Era un problema di librerie. Non le ho incluse nei file delle funzioni.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo