Programma con struct, come procedo?

di il
4 risposte

Programma con struct, come procedo?

Ragazzi dopo aver capito il funzionamento dei record, mi sono cimentato in un programmino che mi gestisce la formazione di una squadra di calcio,

questo è il mio sorgente :
#include <iostream>

using namespace std;

struct schema

{
	
		
	string	portiere;
		
	
    string 	difensore;
	
		
	string 	centrocampista;
		
	
	string 	attaccante;
		
};

schema ruolo;



int main (int argc, char * const argv[]) {
	
	string squadra;
	
	int d,c,a;
 
	cout << "\n     *****     Salve, benvenuto nel programma per la gestione della tua squadra, inserisci il nome della squadra :     ***** \n";
	cin>>squadra;
	
	cout <<"Inserire il nome del portiere";
	cin>>ruolo.portiere;
	
	cout <<"quanti difensori voui schierare in campo ?";
	cin>>d;
		for(int i=0;i<d;i++)
		{
			cout<<"Inserire nomi difensori";
			cin>>ruolo.difensore;
		}
	
	
	
	cout <<"quanti centrocampisti voui schierare in campo ?";
	cin>>c;
		for(int i=0;i<c;i++)
		{
			cout<<"inserire nomi centrocampisti";
			cin>>ruolo.centrocampista;
		
		}
	cout <<"quanti attaccanti voui schierare in campo ?";
	cin>>a;
		for(int i=0;i<a;i++)
	{
		cout<<"inserire nomi attaccanti";
		cin>>ruolo.attaccante;
	}
	
	
	cout << "\n     *****     Stampa della squadra     *****";	
	
	
	cout << "\n \n \n-----     "<<squadra <<"     -----";
	
	
	for(int i=0;i<d;i++)
	{
		cout<<ruolo.difensore;
		
	}
}
come è evidente nell'ultimo cout mi sono fermato, perché logicamente mi sono accorto che c'era un problema: quando in precedenza ho chiesto : "quanti difensori vuoi schierare" deo ho inserito il numero, procedevo con un ciclo for per chiedere n volte il difensore, ma dove me li salva? dovrei creare un array?

4 Risposte

  • Re: Programma con struct, come procedo?

    Ciao, quando bisogna aiutare a risolvere un problema è sempre meglio specificare la traccia dell'esercizio. Potresti scrivermela? Se non proprio la traccia, quali sono gli obbiettivi finali? Forse ho capito il tuo problema, ma non ne sono sicuro. Per fare un esercizio del genere devi creare un vettore di record, non basta un record con semplici variabili. Per creare un vettore di record usa la seguente sintassi.. ad esempio:
    
    struct esempio {
       char nome[15];
       char cognome[15];
       int età;
    };
    
    esempio accesso[15];
    
    Ecco il tuo esercizio aggiustato:
    
    #include <iostream>
    #include <stdio.h>
    using namespace std;
    
    struct squadra {
       char nome_squadra [20];
       char nome_portiere [20];
       char nome_difensore [20];
       char nome_centrocampista [20];
       char nome_attaccante [20];
    };
    squadra accedi [20];
    
    int main () {
       int  N1, N2, N3, i;
       cout <<"Inserisci il nome della squadra: "<<endl;
       gets (accedi[0].nome_squadra);
       cout <<"Inserisci il nome del portiere: "<<endl;
       gets (accedi[0].nome_portiere);
       cout <<"Quanti difensori vuoi schierare in campo?"<<endl;
       cin >> N1;
       for (i=0;i<N;i++) {
          cout <<"Inserisci il nome del "<<i+1<<"° difensore: "<<endl;
          gets (accedi[i].nome_difensore);
       }
       cout <<"Quanti centrocampisti vuoi schierare in campo?"<<endl;
       cin >> N2;
       for (i=0;i<N2;i++) {
          cout <<"Inserisci il nome del "<<i+1<<"° centrocampista: "<<endl;
          gets (accedi[i].nome_centrocampista);
       }
       cout <<"Quanti attaccanti vuoi schierare in campo?"<<endl;
       cin >> N3;
       for (i=0;i<N3;i++) {
          cout <<"Inserisci il nome del "<<i+1<<"° attaccante: "<<endl;
          gets (accedi[i].nome_attaccante);
       }
       cout <<"Hai detto di volere: "<<endl;
       cout <<accedi[0].nome_portiere<<" come portiere;"<<endl;
       cout <<"Hai scelto di volere come difensori: "<<endl;
       for (i=0;i<N1;i++) 
          cout <<accedi[i].nome_difensore<<" ";
       cout <<endl;
       cout <<"Hai scelto di volere come centrocampisti: "<<endl;
       for (i=0;i<N2;i++) 
          cout<<accedi[i].nome_centrocampista<<" ";
       cout <<endl;
       cout <<"Hai scelto di volere come attaccanti: "<<endl;
       for (i=0;i<N3;i++) 
          cout <<accedi[i].nome_attaccante<<" ";
       cout <<endl;
       system ("pause");
       return 0;
    }
    
  • Re: Programma con struct, come procedo?

    Io ho risolto così, è leggermente diverso :
    #include <iostream>
    
    using namespace std;
    
    
    
    
    struct schema
    
    {
    	
    		
    	string	portiere;
    		
    	
        string 	difensore[4];
    	
    		
    	string 	centrocampista[4];
    		
    	
    	string 	attaccante[3];
    		
    };
    
    
    
    schema ruolo;
    
    
    
    
    
    int main (int argc, char * const argv[]) {
    	
    	string squadra;
    	
    	
    	
    	int d,c,a;
    	
    	
    	
    	
     
    	cout << "\n     *****     Salve, benvenuto nel programma per la gestione della tua squadra, inserisci il nome della squadra :     ***** \n";
    	cin>>squadra;
    	
    	cout <<"Inserire il nome del portiere \n ";
    			cin>>ruolo.portiere;
    	
    	
    	
    	cout <<"\n quanti difensori voui schierare in campo ? \n";
    	cin>>d;
    	cout<<"\n Inserire nomi difensori \n";
    
    		for(int i=0;i<d;i++)
    		{
    			
    			cin>>ruolo.difensore[i];
    		}
    	
    	
    	
    	cout <<"\n quanti centrocampisti voui schierare in campo ? \n";
    	cin>>c;
    	
    		cout<<"\n inserire nomi centrocampisti \n";
    		for(int i=0;i<c;i++)
    		{
    		
    			cin>>ruolo.centrocampista[i];
    		}
    	
    	
    	
    	cout <<"\n quanti attaccanti voui schierare in campo ? \n";
    	cin>>a;
    	cout<<"\n inserire nomi attaccanti ";
    
    		for(int i=0;i<a;i++)
    	{
    		cin>>ruolo.attaccante[i];
    	}
    	
    	
    	
    	cout << "\n     *****     Stampa della squadra     *****";	
    	
    	
    	cout << "\n \n \n-----     "<<squadra <<"     -----";
    	
    	
    	cout<<"\n-- Portiere --";
    	cout<<"\n "<< ruolo.portiere;
    	
    	
    	cout<<"\n-- Difesa --";
    	for(int i=0;i<d;i++)
    	{
    		cout<<"\n "<<ruolo.difensore[i];
    	}
    	
    	
    	
    	cout<<"\n-- Centro campo --";
    	for(int i=0;i<c;i++)
    	{
    		cout<<"\n "<<ruolo.centrocampista[i];
    	}
    	
    	
    	cout <<"\n-- Attacco --";
    	for(int i=0;i<a;i++)
    	{
    		cout<<"\n "<<ruolo.attaccante[i];
    	}
    	cout<<endl;
    	
    }
    anche se non so se sia un modo di procedere "didatticamente" corretto
    voi che ne pensate?
  • Re: Programma con struct, come procedo?

    C'è un errore logico. Nota che:
    cin >> ruolo.difensore[i];
    è errato. Infatti tu non stai operando sul vettore di record, ma sul vettore nel record (che non hai nemmeno dichiarato). Il modo corretto è dichiarare la variabile schema come vettore:
    schema ruolo [15];
    Ora che hai creato un vettore di record puoi aggiustare l'operazione di input in questo modo:
    cin >> ruolo[i].difensore;
    Ovviamente vale per tutte le operazioni di: lettura - assegnazione -output.
  • Re: Programma con struct, come procedo?

    Ma non capisco l'errore logico, o meglio sono offuscato dal fatto che funziona lo stesso xD.

    comunque dopo provvedo a modificare come mi hai consigliato, per il momento ti posto la versione con i file main.cpp header e file.cpp, ho un problema sia con il passaggio dei valori, sia nella dichiarazione della variabile di tipo struct;


    Main
    #include <iostream>
    #include "squadra.h"
    
    using namespace std;
    
    
    
    int main (int argc, char * const argv[]) {
    	
    	
    	string squadra;
    	
    	schema ruolo;  //<------ aggregate 'schema ruolo' has incomplete type and cannot be defined
    
    
    
    	
    	int d,c,a;
    	
    	
    	
    	
     
    	cout << "\n     *****     Salve, benvenuto nel programma per la gestione della tua squadra, inserisci il nome della squadra :     ***** \n";
    	
    	
    	cin>>squadra;
    	
    	
    	inserisciNomi(&ruolo, &d, &c, &a );
    	
    	
    	
    	
    	cout << "\n     *****     Stampa della squadra     *****";	
    	
    	
    	cout << "\n \n \n-----     "<<squadra <<"     -----";
    	
    	
    	stampaNomi(ruolo,d,c,a);
    	
    	
    }



    Squadra.cpp
    
    #include "squadra.h"
    #include <iostream>
    
    using namespace std;
    
    
    struct schema
    
    {
    	
    	
    	string	portiere;
    	
    	
        string 	difensore[4];
    	
    	
    	string 	centrocampista[4];
    	
    	
    	string 	attaccante[3];
    	
    };
    
    
    void inserisciNomi(schema &ruolo ,int &d,int &c,int&a )
    	
    	{
    		
    		cout <<"Inserire il nome del portiere \n ";
    		cin>>ruolo.portiere;
    		
    		
    		
    		cout <<"\n quanti difensori voui schierare in campo ? \n";
    		cin>>d;
    		cout<<"\n Inserire nomi difensori \n";
    		
    		for(int i=0;i<d;i++)
    		{
    			
    			cin>>ruolo.difensore[i];
    		}
    		
    		
    		
    		cout <<"\n quanti centrocampisti voui schierare in campo ? \n";
    		cin>>c;
    		
    		cout<<"\n inserire nomi centrocampisti \n";
    		for(int i=0;i<c;i++)
    		{
    			
    			cin>>ruolo.centrocampista[i];
    		}
    		
    		
    		
    		cout <<"\n quanti attaccanti voui schierare in campo ? \n";
    		cin>>a;
    		cout<<"\n inserire nomi attaccanti ";
    		
    		for(int i=0;i<a;i++)
    		{
    			cin>>ruolo.attaccante[i];
    		}
    	}	
    	
    
    
    
    void stampaNomi(schema ruolo,int d,int c,int a)
    {
    	
    	
    	
    	cout<<"\n-- Portiere --";
    	cout<<"\n "<< ruolo.portiere;
    	
    	
    	cout<<"\n-- Difesa --";
    	for(int i=0;i<d;i++)
    	{
    		cout<<"\n "<<ruolo.difensore[i];
    	}
    	
    	
    	
    	cout<<"\n-- Centro campo --";
    	for(int i=0;i<c;i++)
    	{
    		cout<<"\n "<<ruolo.centrocampista[i];
    	}
    	
    	
    	cout <<"\n-- Attacco --";
    	for(int i=0;i<a;i++)
    	{
    		cout<<"\n "<<ruolo.attaccante[i];
    	}
    	cout<<endl;
    	
    }
    
    	
    
    


    Squadra.h
    #ifndef _squadra
    #define _squadra
    
    typedef struct schema;
    
    void inserisciNomi(schema &,int &d,int &c,int &a );
    
    void stampaNomi(schema,int d,int c,int a);
    
    
    
    #endif
Devi accedere o registrarti per scrivere nel forum
4 risposte