[C] Strutture

di il
12 risposte

[C] Strutture

Salve,in teoria ho una funzione che mi dovrebbe restituire 3 valori,quindi dovrei usare una struct...per caso potete farmi un banale esempio in cui i valori della funzione sono memorizzati nella struct?
grazie in anticipo

12 Risposte

  • Re: [C] Strutture

    Perché non ci provi tu e vediamo dove sbagli?
  • Re: [C] Strutture

    oregon ha scritto:


    Perché non ci provi tu e vediamo dove sbagli?
    perchè sul libro non c'è una cosa del genere e non saprei cosa scrivere
  • Re: [C] Strutture

    Non è possibile, andiamo...

    E comunque fai una ricerca, avrai mille risposte da STUDIARE per provarci da solo.

    Copiare del codice altrui non ti fa capire nulla

    Comincia a scrivere tu del codice semplice che definisca la struttura e la passi alla funzione. Per tre parametri non sarebbe neanche necessaria una struct ma appunto tre argomenti separati.
  • Re: [C] Strutture

    oregon ha scritto:


    Non è possibile, andiamo...

    E comunque fai una ricerca, avrai mille risposte da STUDIARE per provarci da solo.

    Copiare del codice altrui non ti fa capire nulla

    Comincia a scrivere tu del codice semplice che definisca la struttura e la passi alla funzione. Per tre parametri non sarebbe neanche necessaria una struct ma appunto tre argomenti separati.
    uniche cose che riesco a reperire da internet poichè è molto confusa la discussione ...
    
    
    #include <stdio.h>
    
    struct studente{
        int prodotto;
        int somma;
    };
    
    
    studente divmolt(int a,int b)
    {
    	 a=4;
    	 b=5;
    studente ret;	
    ret.prodotto=a*b;
    ret.somma=a+b;
    
    
    
    }    
    
  • Re: [C] Strutture

    Ok, quindi ti basta scrivere alla fine della funzione
    
    	return ret;
    
    Tieni presente che i valori 4 e 5 arrivano dall'esterno come argomenti e non sono assegnati all'interno della funzione.
    Quindi scriverai nel main
    
    int main()
    {
    	studente s;
    	
    	s = divmolt(4, 5);
    
  • Re: [C] Strutture

    oregon ha scritto:


    Ok, quindi ti basta scrivere alla fine della funzione
    
    	return ret;
    
    Tieni presente che i valori 4 e 5 arrivano dall'esterno come argomenti e non sono assegnati all'interno della funzione.
    Quindi scriverai nel main
    
    int main()
    {
    	studente s;
    	
    	s = divmolt(4, 5);
    

    grazie però continua a darmi parecchi errori....
  • Re: [C] Strutture

    Beh, detta così non serve a nulla.

    Se mostri codice ed errori è meglio.
  • Re: [C] Strutture

    oregon ha scritto:


    Beh, detta così non serve a nulla.

    Se mostri codice ed errori è meglio.
    
    #include <stdio.h>
    void divmolt(int a,int b);
    
    
    struct studente{
        int a;
        int b;
    };
    
    int main()
    {
       studente s;
       
       s = divmolt(4, 5);
       
       
       
       
    }
    studente divmolt(int a,int b)
    {
        a=4;
        b=5;
    studente ret;   
    return ret;
    
    
    
    }    
    
    
    
    il mio scopo è quello di restituire i valori a e b alla struttura
    
    
    
    
    
    
  • Re: [C] Strutture

    Suggerimento: normalmente non si ritorna (in C) una struttura come risultato.
    Bensì un valore (normalmente boolean) per successo-fallimento, mentre i valori di output vengono scritti in una struttura passata come parametro alla funzione medesima, da chi la chiama.
    Non è una regola generale, diciamo più una prassi.

    qualcosa del genere
    int divmolt(int i_a,int i_b, QUALCOSA o_risultato)
    Il qualcosa... cosa sarà?
    Aiutino: in C un puntatore a una struttura

    EDIT: un gran casino, ha definito void la funzione e chi più ne ha ne metta!!!!
    Un minimo di logica.

    Alla funzione passa tanti parametri in ingresso (io li chiamo i_nomevariabile per distinguerli, ma è questione di abitudine), più tanti parametri in uscita (cioè verranno sovrascritti dalla funzione, io li chiamo o_nomevariabile sempre per distinguerli)
    La funzione dichiarala con ritorno int


    EDIT2: da quanto posso intuire ancora non sei arrivato ai puntatori, o ci sei già?
  • Re: [C] Strutture

    
    #include <stdio.h>
    
    // non so perchè ci sono nomi così scemi, comunque pazienza, l'importante è il concetto
    
    typedef struct boh
    {
        int valore1;
    	int valore2;
    	int somma;
        int prodotto;
    } studente;
    
    int divmolt(int i_primovalore,int i_secondovalore, studente* o_risultato)
    {
    	if (!o_risultato)
    	{
    		return 0;
    	}
    	else
    	{
    		(*o_risultato).valore1=i_primovalore;
    		(*o_risultato).valore2=i_secondovalore;
    		(*o_risultato).somma=i_primovalore+i_secondovalore;
    		(*o_risultato).prodotto=i_primovalore*i_secondovalore;
    		return 1;
    	}
    }    
    
    void main()
    {
    	studente s;
    	if (divmolt(4,5,&s)>0) 
    	{
    		printf("V1       %d\n",s.valore1);
    		printf("V2       %d\n",s.valore2);
    		printf("Somma    %d\n",s.somma);
    		printf("Prodotto %d\n",s.prodotto);
    	}
    	else
    	{
    		printf("Qualcosa andato storto\n");
    	}
    
    	printf("--- Ora per scopo didattico passo un valore NULL\n");
    	if (divmolt(4,5,NULL)>0) 
    	{
    		printf("V1       %d\n",s.valore1);
    		printf("V2       %d\n",s.valore2);
    		printf("Somma    %d\n",s.somma);
    		printf("Prodotto %d\n",s.prodotto);
    	}
    	else
    	{
    		printf("Qualcosa andato storto\n");
    	}
    }
    
  • Re: [C] Strutture

    In questa funzione ti avevo detto di non assegnare a e b (non mi hai capito) quindi dovrebbe essere
    
    studente divmolt(int a,int b)
    {
       studente ret;   
    
      ret.prodotto=a*b;
      ret.somma=a+b;
    
       return ret;
    }    
    
    Se hai altri problemi, riproponi SEMPRE il codice che non va e i MESSAGGI d'errore.
  • Re: [C] Strutture

    +m2+ ha scritto:


    
    #include <stdio.h>
    
    // non so perchè ci sono nomi così scemi, comunque pazienza, l'importante è il concetto
    
    typedef struct boh
    {
        int valore1;
    	int valore2;
    	int somma;
        int prodotto;
    } studente;
    
    int divmolt(int i_primovalore,int i_secondovalore, studente* o_risultato)
    {
    	if (!o_risultato)
    	{
    		return 0;
    	}
    	else
    	{
    		(*o_risultato).valore1=i_primovalore;
    		(*o_risultato).valore2=i_secondovalore;
    		(*o_risultato).somma=i_primovalore+i_secondovalore;
    		(*o_risultato).prodotto=i_primovalore*i_secondovalore;
    		return 1;
    	}
    }    
    
    void main()
    {
    	studente s;
    	if (divmolt(4,5,&s)>0) 
    	{
    		printf("V1       %d\n",s.valore1);
    		printf("V2       %d\n",s.valore2);
    		printf("Somma    %d\n",s.somma);
    		printf("Prodotto %d\n",s.prodotto);
    	}
    	else
    	{
    		printf("Qualcosa andato storto\n");
    	}
    
    	printf("--- Ora per scopo didattico passo un valore NULL\n");
    	if (divmolt(4,5,NULL)>0) 
    	{
    		printf("V1       %d\n",s.valore1);
    		printf("V2       %d\n",s.valore2);
    		printf("Somma    %d\n",s.somma);
    		printf("Prodotto %d\n",s.prodotto);
    	}
    	else
    	{
    		printf("Qualcosa andato storto\n");
    	}
    }
    
    grazie mille,ora è tutto chiaro,ma se invece di 4,5 avessi dichiarato nel main due valori interi e avrei passato int a e int b ad esempio,veniva lo stesso? edit=ho provato e si va lo stesso(domanda stupida)
    e nel caso volessi passare altre variabili, vale la sempre la condizione if(divmolt,4,5,&s)>0?
    non ho capito perchè si metta il return1;
    altra cosa:se volessi stampare un array di struct mettendo valore 1,valore 2,somma e prodoto in un array di struct come farei? perchè gli array di struct di solito li definisco inserendo i valori ,non l'ho mai fatto ritornando dei valori da una funzione....grazie mille se possibile potresti farmi vedere un codice in cui tali 3 valori vengono in messi un array di struct,e tale array viene stampato?
Devi accedere o registrarti per scrivere nel forum
12 risposte