PDA

View Full Version : [C] Inserire stringa in un campo


Riccardo88
06-05-2013, 16:51
Domanda banale, ma in C non mi viene e non capisco perchè.

In pratica devo soltanto inserire una stringa in un campo di una struct.

#define NMAX 30

typedef struct{
char nome[ NMAX ];
char cognome[ NMAX ];
int matricola;
}studente;

void leggiStruttura( studente s );
void stampaStruttura( studente s );
--------------------------------------------- Header ---

void leggiStruttura( studente s )
{
printf("Inserisci i dati dello studente:\n");
printf("Nome: ");
scanf( "%s", &s.nome );
printf("Cognome: ");
scanf( "%s", &s.cognome );
printf("Matricola: ");
scanf( "%d", &s.matricola );

}

void stampaStruttura( studente s )
{
printf("Stampo i dati dello studente:\n");
printf("Nome: ");
printf( "%s\n", &s.nome );
printf("Cognome: ");
printf( "%s\n", &s.cognome );
printf("Matricola: ");
printf( "%d\n", &s.matricola );

}
------------------------------ .c ---

#include "libretto20Esami.h"

int main(int argc, char *argv[])
{
studente mioStudente;

leggiStruttura( mioStudente );
stampaStruttura( mioStudente );

printf("\n\n");

system("PAUSE");
return 0;
}



Dov'è l'errore ? :confused:

Tnx.

Mettiu_
06-05-2013, 18:33
Dovresti utilizzare i puntatori per passare il parametro alla tua funzione leggiStruttura, altrimenti le modifiche che la funzione effettua sulla struttura non si ripercuotono sulla variabile passata (che è la semantica che intendi dare tu al codice) ma solo su una copia locale alla funzione, che viene distrutta alla fine della chiamata.
Per quanto riguarda la funzione stampaStruttura, non è strettamente necessario passare il puntatore a studente (anche se potrebbe valere la pena in qualche caso) perchè la funzione si limita a leggere e non modifica nessun campo della variabile...
In soldoni, le due funzioni diventano così:

void leggiStruttura( studente* s );
void stampaStruttura( studente s );

void leggiStruttura( studente* s )
{
printf("Inserisci i dati dello studente:\n");
printf("Nome: ");
scanf( "%s", s->nome );
printf("Cognome: ");
scanf( "%s", s->cognome );
printf("Matricola: ");
scanf( "%d", &(s->matricola) );

}

void stampaStruttura( studente s )
{
printf("Stampo i dati dello studente:\n");
printf("Nome: ");
printf( "%s\n", s.nome );
printf("Cognome: ");
printf( "%s\n", s.cognome );
printf("Matricola: ");
printf( "%d\n", s.matricola );

}

Mentre per quanto riguarda il main:


studente mioStudente;
leggiStruttura( &mioStudente );
stampaStruttura( mioStudente );
printf("\n\n");
system("PAUSE");
return 0;

Ciao :)

Riccardo88
06-05-2013, 21:21
Grazie mille, funziona tutto! :)