Problema struct da inserire in funzione

di il
14 risposte

Problema struct da inserire in funzione

Buongiorno ragazzi, stavo provando a implementare una funzione per valutare la media dei voti di una classe, tuttavia non riesco a capire come inserire nella funzione come dato in input proprio la riga relativa ai voti.
Ho un errore , infatti, alla 34 esima riga, quando richiamo la funzione nel main del tipo:request for member'voto' in 'studente' , which is of non-class type dati[n][aka main (int, char**)::persona[n]
Qualcuno saprebbe aiutarmi?




#include <iostream>
using namespace std;

float somma(float[],int n);

int main(int argc, char** argv) {
	typedef struct persona{
		char nome[];
		char cognome[];
		float voto;
		}dati;
	
	cout<<"Inserisci il numero di studenti"<<endl;
	int n;
	cin>>n;
		while(n<2||n>50)
		{cout<<"Errore: inserisci un numero fra 2 e 50"<<endl;
		cin>>n;
		}
		dati studente[n];
		for(int i=0;i<n;i++)
		{cout<<"Inserisci il nome del"<<i+1<<" ° studente"<<endl;
		cin>>studente[i].nome;
		cout<<"Inserire il cognome del "<<i+1<<" ° studente"<<endl;
		cin>>studente[i].cognome;
		cout<<"Inserire il voto del"<<i+1<<" ° studente"<<endl;
		cin>>studente[i].voto;
		}
			cout<<"Vuoi conoscere la media?Premi y, altrimenti premi qualsiasi altro pulsante per procedere: "<<endl;
			char yes;
			char y;	
		    cin>>yes;
		    if(yes=='y')
		    {somma(studente.voto,n);
			}
	return 0;
}

float somma(float arr[] , int riemp)
{float totale=0;
for (int i=0; i<riemp;i++)
{totale+=arr[i];
}
cout<<totale;
}

14 Risposte

  • Re: Problema struct da inserire in funzione

    Studente è un array di strutture, non una struttura...non ha un campo di nome voto
    studente.voto è un'istruzione senza senso

    Per fare quello che vuoi fare te devi passare l'array di strutture a una funzione con la sua lunghezza n, dentro alla funzione con un ciclo scorri, per ogni struttura, il valore del voto.
  • Re: Problema struct da inserire in funzione

    Quindi, cosa dovrei scrivere nella firma della funzione e nel richiamo della funzione affinhchè possa togliere il problema?
  • Re: Problema struct da inserire in funzione

    Così dovrebbe funzionare:
    somma(studente, n);
    e
    
    void somma(dati studenti[] , int quantiStudenti) {
    float totale=0.0;
    for (int i=0; i<quantiStudenti; i++) { totale+=studenti.voto[i]; }
    cout<<totale/quantiStudenti;
    return;
    }

    spostando però la dichiarazione/definizione della struttura fuori dal main
  • Re: Problema struct da inserire in funzione

    P.S. Datti un'occhiata a new e delete per l'allocazione dinamica della memoria perché dati studente[n]; non è il modo corretto di richiedere memoria a runtime.
  • Re: Problema struct da inserire in funzione

    D'accordo, ti riposto il codice , tuttavia mi da ora altri errori, spero di aver seguito per filo e segno ciò che mi hai detto te. Tuttavia ora riscontro altri tipi di errori:
    
    #include <iostream>
    using namespace std;
    
    
    	typedef struct persona{
    		char nome[];
    		char cognome[];
    		float voto;
    		}dati;
    		void somma(dati studente,int n);
    int main(int argc, char** argv) {
    
    	cout<<"Inserisci il numero di studenti"<<endl;
    	int n;
    	cin>>n;
    		while(n<2||n>50)
    		{cout<<"Errore: inserisci un numero fra 2 e 50"<<endl;
    		cin>>n;
    		}
    		dati studente[n];
    		for(int i=0;i<n;i++)
    		{cout<<"Inserisci il nome del"<<i+1<<" ° studente"<<endl;
    		cin>>studente[i].nome;
    		cout<<"Inserire il cognome del "<<i+1<<" ° studente"<<endl;
    		cin>>studente[i].cognome;
    		cout<<"Inserire il voto del"<<i+1<<" ° studente"<<endl;
    		cin>>studente[i].voto;
    		}
    			cout<<"Vuoi conoscere la media?Premi y, altrimenti premi qualsiasi altro pulsante per procedere: "<<endl;
    			char yes;
    			char y;	
    		    cin>>yes;
    		    if(yes=='y')
    		    {somma(studente,n);
    			}
    	return 0;
    }
    
    void somma(dati studente[] , int quantiStudenti) 
    {
    float totale=0.0;
    for (int i=0; i<quantiStudenti; i++) { totale+=studente.voto[i]; }
    cout<<totale/quantiStudenti;
    return;
    }
    
    Più precisamente alla riga
    34 24 C:\Users\Giuseppe\Documents\Votimediastruct.cpp [Error] could not convert '(dati*)(& studente)' from 'dati* {aka persona*}' to 'dati {aka persona}'
    42 57 C:\Users\Giuseppe\Documents\Votimediastruct.cpp [Error] request for member 'voto' in 'studente', which is of pointer type 'dati* {aka persona*}' (maybe you meant to use '->' ?)


    Se non ti è di noia, potresti continuare ad aiutarmi a correggere questi elementi?
  • Re: Problema struct da inserire in funzione

    Sicuro ho sbagliato io "totale+=studente.voto;" sostituiscilo con "totale+=studente.voto;"
  • Re: Problema struct da inserire in funzione

    Si mi son accorto di quell'errore e l ho corretto prima di postare il codice. Dopo aver fatto tale correzione ho notato questi errori,diversi dal precedente
  • Re: Problema struct da inserire in funzione

    Deve essere

    void somma(dati studente[], int n);

    e

    for (int i = 0; i<quantiStudenti; i++) { totale += studente.voto; }
  • Re: Problema struct da inserire in funzione

    
    #include <iostream>
    using namespace std;
    
    
    	typedef struct persona{
    		char nome[];
    		char cognome[];
    		float voto;
    		}dati;
    		void somma(dati studente,int n);
    int main(int argc, char** argv) {
    
    	cout<<"Inserisci il numero di studenti"<<endl;
    	int n;
    	cin>>n;
    		while(n<2||n>50)
    		{cout<<"Errore: inserisci un numero fra 2 e 50"<<endl;
    		cin>>n;
    		}
    		dati studente[n];
    		for(int i=0;i<n;i++)
    		{cout<<"Inserisci il nome del"<<i+1<<" ° studente"<<endl;
    		cin>>studente[i].nome;
    		cout<<"Inserire il cognome del "<<i+1<<" ° studente"<<endl;
    		cin>>studente[i].cognome;
    		cout<<"Inserire il voto del"<<i+1<<" ° studente"<<endl;
    		cin>>studente[i].voto;
    		}
    			cout<<"Vuoi conoscere la media?Premi y, altrimenti premi qualsiasi altro pulsante per procedere: "<<endl;
    			char yes;
    			char y;	
    		    cin>>yes;
    		    if(yes=='y')
    		    {somma(studente[],n);
    			}
    	return 0;
    }
    
    void somma(dati studente[] , int quantiStudenti) 
    {
    float totale=0.0;
    for (int i=0; i<quantiStudenti; i++) { totale+=studente[i].voto; }
    cout<<totale/quantiStudenti;
    return;
    }
    
    
    Errore alla riga 34:

    34 23 C:\Users\Giuseppe\Documents\Votimediastruct.cpp [Error] expected primary-expression before ']' token.

    Chiedo scusa del tempo che sto richiedendo
  • Re: Problema struct da inserire in funzione

    Ti ho già detto di modificare questa

    void somma(dati studente,int n);

    in

    void somma(dati studente[],int n);

    NON DEVI MODIFICARE QUESTA

    somma(studente[], n);

    che deve rimanere

    somma(studente, n);

    P.S. Fai attenzione a cosa ti si scrive, altrimenti altro che perdere tempo ...
  • Re: Problema struct da inserire in funzione

    Si devi modificare anche il prototipo della funzione
  • Re: Problema struct da inserire in funzione

    #include <iostream>
    using namespace std;
    
    
       typedef struct persona{
          char nome[];
          char cognome[];
          float voto;
          }dati;
    	  
          void somma(dati studente[],int n);
    	  
    int main(int argc, char** argv) {
    
       cout<<"Inserisci il numero di studenti"<<endl;
       int n;
       cin>>n;
          while(n<2||n>50)
          {cout<<"Errore: inserisci un numero fra 2 e 50"<<endl;
          cin>>n;
          }
          dati studente[n];
          for(int i=0;i<n;i++)
          {cout<<"Inserisci il nome del"<<i+1<<" ° studente"<<endl;
          cin>>studente[i].nome;
          cout<<"Inserire il cognome del "<<i+1<<" ° studente"<<endl;
          cin>>studente[i].cognome;
          cout<<"Inserire il voto del"<<i+1<<" ° studente"<<endl;
          cin>>studente[i].voto;
          }
             cout<<"Vuoi conoscere la media?Premi y, altrimenti premi qualsiasi altro pulsante per procedere: "<<endl;
             char yes;
             char y;   
              cin>>yes;
              if(yes=='y')
              {somma(studente,n);
             }
       return 0;
    }
    
    void somma(dati studente[] , int quantiStudenti)
    {
    float totale=0.0;
    for (int i=0; i<quantiStudenti; i++) { totale+=studente[i].voto; }
    cout<<totale/quantiStudenti;
    return;
    }
    
    
  • Re: Problema struct da inserire in funzione

    Ti chiedo scusa, pensavo di averlo corretto già in precedenza.
    Ringrazio entrambi e vi auguro una buona giornata.
  • Re: Problema struct da inserire in funzione

    Di nulla
Devi accedere o registrarti per scrivere nel forum
14 risposte