[C] Non riesco a mettere una struct come argomento di funzione

di il
7 risposte

[C] Non riesco a mettere una struct come argomento di funzione

Mi serve avere una funzione che modifichi dei dati contenuti all'interno di una struct in modo che poi questi dati rimangano invariati, come faccio a passare la struct alla funzione in questione?
Pensavo di usare ad esempio un puntatore alla struct, ma poi come faccio a metterlo come argomento di funzione? Qual'è la sintassi corretta per fare ciò?

7 Risposte

  • Re: [C] Non riesco a mettere una struct come argomento di funzione

    Un puntatore lo scrivi così

    struct struttura *pnt;
  • Re: [C] Non riesco a mettere una struct come argomento di funzione

    Si ma guarda qua
    
    void stampa0(COSA DEVO SCRIVERE?);
    
    
    int main()
    {
    	int i;
    
    	struct testi
    	{
    		char testo0[50] = "nel mezzo del cammin di nostra vita";
    		char testo1[50] = "mi ritrovai in una selva oscura";
    		char testo2[50] = "che la diritta via era smarrita";
    	}strofa;
    	
    	struct testi *puntatore;
    	puntatore = &strofa;
    	stampa0(COSA DEVO SCRIVERE?);
    }
    
    
    	
    
    void stampa0(COSA DEVO SCRIVERE?)
    {	
    	printf("%s", puntatore);
    } 
    
    Esattamente cosa dovrei scrivere nei punti cui ho scritto "Cosa devo scrivere"?
    E poi all'interno della funzione, come faccio poi a richiamare ad esempio il testo1?
  • Re: [C] Non riesco a mettere una struct come argomento di funzione

    Quello che cerchi è qua :

    Vai alla pagina 133-134 . Ciao
  • Re: [C] Non riesco a mettere una struct come argomento di funzione

    Ok sono andato a vedere ciò che mi hai linkato, e mi è stato molto utile per schiarirmi le idee.
    Però ho qualche altro dubbio.
    Nel tuo testo, a pag 134, scrive, nella prototipazione di funzione "void shuffle(Card *);" e l'asterisco fa pensare che l'argomento debba essere un puntatore, come mai invece poi mette argomento "Deck" che è un semplice array di card? è un errore di battitura?

    E poi, scrivendo un codice del genere:
    
    struct testi
    {
    	char *testo0 = "nel mezzo del cammin di nostra vita";
    	char *testo1 = "mi ritrovai in una selva oscura";
    	char *testo2 = "che la diritta via era spartita";
    }strofa;
    
    
    void stampa0(testi cstrofa);
    void stampa1(testi cstrofa);
    
    
    int main()
    {
    	stampa0(strofa);
    	stampa1(strofa);
    	system("pause");
    }
    
    void stampa0(testi cstrofa)
    {		
    	printf("%s \n", cstrofa.testo0);
    	printf("%s \n", cstrofa.testo1);
    	printf("%s \n", cstrofa.testo2);
    	cstrofa.testo2 = "che la diritta via era smarrita";
    } 
    
    void stampa1(testi cstrofa)
    {
    	printf("\n \n%s \n", cstrofa.testo0);
    	printf("%s \n", cstrofa.testo1);
    	printf("%s \n", cstrofa.testo2);
    }
    
    Perchè la funzione "stampa0" non modifica il valore del testo2 (Quando poi viene eseguita la seconda funzione il testo 2 rimane comunque "Che la diritta via era spartita"? Cosa dovrei scrivere per farle fare ciò?

    è perchè se scrivo "char *testo2 = "che la diritta via era spartita";" me lo da corretto e me lo stampa pure, e se invece scrivo "char *testo2[36] = "che la diritta via era spartita";" mi dice che è sbagliato e non me lo fa stampare?
    In teoria una stringa dovrebbe essere di tipo array, non un char che invece dovrebbe essere un carattere singolo.
    Sono confuso
  • Re: [C] Non riesco a mettere una struct come argomento di funzione

    Questo è il codice corretto, da studiare
    
    #include <string.h>
    
    struct testi
    {
       char testo0[50];
       char testo1[50];
       char testo2[50];
    } strofa;
    
    
    void stampa0(struct testi *s);
    void stampa1(struct testi *s);
    
    int main()
    {
       strcpy(strofa.testo0, "nel mezzo del cammin di nostra vita");
       strcpy(strofa.testo1, "mi ritrovai in una selva oscura");
       strcpy(strofa.testo2, "che la diritta via era spartita");
    
       stampa0(&strofa);
       stampa1(&strofa);
    
       return 0;
    }
    
    void stampa0(struct testi *s)
    {      
       printf("%s \n", s->testo0);
       printf("%s \n", s->testo1);
       printf("%s \n", s->testo2);
    
       strcpy(s->testo2, "che la diritta via era smarrita");
    } 
    
    void stampa1(struct testi *s)
    {
       printf("\n \n%s \n", s->testo0);
       printf("%s \n", s->testo1);
       printf("%s \n", s->testo2);
    }
    
    come mai invece poi mette argomento "Deck" che è un semplice array di card? è un errore di battitura?
    Il nome di un array rappresenta il puntatore al suo primo elemento. Il nome di un array è quindi un puntatore.
    Perchè la funzione "stampa0" non modifica
    Perché non passi l'argomento per puntatore, vedi correzione nel codice sopra.
    char *testo2[36]
    Questo è un array di puntatori a char, non un array di char. E' un'altra cosa.

    Hai un bel po' di confusione ma non mi pare tu stia seguendo un libro o un percorso di studi corretto perché molte cose di cui hai parlato sono nozioni di base, che si imparano abbastanza presto dai libri e dai corsi.
  • Re: [C] Non riesco a mettere una struct come argomento di funzione

    No, infatti non sto seguendo ne un libro ne un corso di studi, mi sto orientando con la guida c di HTML.it che ho trovato un po poco chiara e priva di sufficienti esempi. Comunque grazie dell'aiuto
  • Re: [C] Non riesco a mettere una struct come argomento di funzione

    Prego, ma lascia stare le guide online. Se vuoi veramente imparare, libri e pazienza
Devi accedere o registrarti per scrivere nel forum
7 risposte