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

di Anonimizzato19966 il
7 risposte
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

  • Un puntatore lo scrivi così

    struct struttura *pnt;
  • 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?
  • Quello che cerchi è qua :

    Vai alla pagina 133-134 . Ciao
  • 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
  • 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.
  • 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
  • Prego, ma lascia stare le guide online. Se vuoi veramente imparare, libri e pazienza
Devi accedere o registrarti per scrivere nel forum
7 risposte