mercoledì 11 maggio 2011

Corso Linguaggio C #6: Struct

Un saluto a tutti i lettori del blog. In questo periodo i post scritti sono diminutiti tantissimo a causa dei tanti impegni universitari che occupano quasi tutta la mia giornata.

Oggi voglio trattare un nuovo argomento molto importante della programmazione in C ossia le struct.



Le struct sono fondamentali per la programmazione quindi è un dovere impararle alla perfezione.

La prima cosa da fare è strutturare la nostra struct in questo modo:

struct studente {
char nome[10];
char cognome[10];
};

Un consiglio è quello di scrivere sempre la struct fuori dal main in modo da farla essere globale. Adesso che abbiamo strutturato la nostra struct possiamo dichiarare le variabili.

La variabili possono essere dichiarate in due modi:

1) Subito dopo la struct

struct studente {
char nome[10];
char cognome[10];
} stud1;


2) Come una normalissima variabile direttamente nel main:

struct studente stud1;

Per semplificare il secondo tipo di dichiarazione possiamo usare la typedef per rinominare il nuovo tipo di dato creato:

struct studente {
char nome[10];
char cognome[10];
};
typedef struct studente STUDENTE;

In questo modo la dichiarazione nel main verrà fatta così:

STUDENTE stud1;

Adesso che abbiamo visto come creare una struct dobbiamo solo imparare ad usare le variabili associate ad essa.

Riportando l'esempio precedente, ossia

struct studente {
char nome[10];
char cognome[10];
} stud1;

vogliamo andare a modificare i campi interni della variabile stud1.

Per scrivere in questa variabile possiamo usare sia la scanf che la gets() in questo modo:

scanf("%s",&stud1.nome);

oppure

gets(stud1.nome);

Come potete vedere per interagire con i campi della struct basta utilizzare il . (punto).

Per stampare sullo schermo quello che c'è scritto in una variabile utilizziamo una semplicissima printf, ossia

printf("%s",stud1.nome);

E' possibile anche inizializzare una struct ed è importante capire bene il procedimento. Infatti non bisogna assolutamente fare un'operazione di questo tipo:

struct studente {
int eta=18;
char cognome[10];
};


Inizializzare in questo modo è sbagliatissimo. Infatti quando noi strutturiamo la nostra struct non andiamo ad allocare memoria ma andiamo solamente ad impostarla quindi non può essere inizializzata.

Per inizializzarla bisogna fare così:

struct studente {
char nome[10];
char cognome[10];
int eta;
} stud1;
......
......
(nel main)
stud1={"Antonio","Caiazzo",21};

E' fondamentale far corrispondere i campi nell'inizializzazione.

E' consigliabile iniziare a scrivere semplici programmi di lettura e di scrittura di variabili di tipo struct in modo da capire perfettamente il loro funzionamento (la teoria è importante ma la pratica è fondamentale).

Per qualsiasi dubbio potete contattarmi via mail oppure scrivere direttamente sul blog lasciando un commento. Anche se scrivo poco, seguo sempre il blog e quindi le risposte saranno immediate.

A presto!

5 commenti:

Anonimo ha detto...

ciao ascolta volevo chiederti se potevi spiegare brevemente come gestire i dati salvati in un file....ovviamente sempre linguaggio c

Antonio ha detto...

Per gestire i dati salvati in un file di testo (non file binario) devi fare cosi:

Per prima cosa devi dichiarare una variabile con cui aprire il file:

FILE *pf ;

poi puoi aprire il file:

pf = fopen ("test.txt","w");

w sta per write ossia file di scrittura. per scrivere su un file binario basta inserire wb. Al posto di test.txt puoi inserire anche una variabile in modo da poter far scegliere in input il nome del file.

Se hai un file di testo e vuoi portare tutto il testo in un array del tuo programma basta fare:

while(!feof(fp)) //fino a che non incontro il carattere terminatore ripeto il ciclo..
{
fgets(buffer,40,fp);
}

inserisco 40 caratteri alla volta all'interno della variabile buffer, prelevando tutto dalla variabile fp (che ha aperto il file).

Quando finisci di usare un file non dimenticare mai di chiuderlo = fclose(fp);

In futuro scriverò un post dedicato ai file..

Anonimo ha detto...

penso di aver capito, grazie mille per la risposta.
purtroppo in rete non si trovano informazioni molto dettagliate riguardo questo argomento.

Anonimo ha detto...

ciao... io ho un programma in cui devo inserire dei contatti (in formato typedef) da tatiera finchè non inserisco un valore sentinella o non arrivo ad un massimo di tot contatti... come faccio a salvare questi contatti in modo da poterli visualizzare dopo? una matrice di typedef?
esiste?

Antonio ha detto...

typedef non è un formato ma viene utilizzato per rinominare un tipo di dato..

di solito si una per le struct.. tu fai per sempio:

struct studente {........};

hai creato un tipo di dato "struct studente" e per semplificare il tutto lo rinomini scrivendo:

typedef struct studente Studente

in questo modo potrai dichiarare variabili di tipo Studente

Comunque, puoi utilizzare benissimo un array e metterci tutti i dati dentro.. Ovviamente lo devi fare a livello di codice, perchè se crei un array vuoto e lo riempi in input da tastiera quando chiuderai il programma andrà tutto perso.. se invece i dati li scrivi nel codice sorgente li avrai sempre a portata di mano..

Posta un commento

Altri articoli interessanti