PDA

Visualizza la versione completa : [C] Salvare Struttura in un File


andreadg84
18-12-2006, 22:58
Ragazzi nessuno di voi mi saprebbe dire come faccio a salvare una struttura in un file?
Questo è il mio programma:
Ringrazio chi mi volesse aiutare..ciao scusate il disturbo (ps: ho l'esame mercoledi :P)

#include <stdio.h>
#include <stdlib.h>
#define MAX 60

/*CREAZIONE DI UNA STRUTTURA */
typedef struct {
char nome[20];
char cognome[20];
int laboratorio;
int scritto;
int orale;
int media;
} studente_t;

/*DICHIARAZIONE FUNZIONI*/
studente_t inserisci_dettagli(void);
void stampa_dettagli(studente_t stud);

int
main()
{
/*DICHIARAZIONE VARIABILI*/
studente_t studente[MAX];
int n,i;

printf ("inserire il numero degli studenti (MASSIMO 60) --->");
scanf ("%d",&n);
for (i=0;i<n;i++)
{
printf ("\n\n Inserisci i dati del %d studente ",i+1);
studente[i]=inserisci_dettagli(); /*CHIAMATA FUNZIONE*/
};

for (i=0;i<n;i++)
{
printf("\n\n I voti del %d studente sono", i+1);
stampa_dettagli (studente[i]); /*CHIAMATA FUNZIONE*/
};

system ("pause");
return(0);
}

/*FUNZIONE*/
studente_t inserisci_dettagli()
{
studente_t stud;

printf("\n\n COGNOME ----->");
scanf("%s",stud.cognome);

printf("\n\n NOME ----->");
scanf("%s",stud.nome);

printf("\n\n VOTO DELLA PROVA DI LABORATORIO ----->");
scanf("%d",&stud.laboratorio);

printf("\n\n VOTO DELLA PROVA SCRITTA ----->");
scanf("%d",&stud.scritto);

printf("\n\n VOTO DELLA PROVA ORALE ----->");
scanf("%d",&stud.orale);

stud.media=(stud.laboratorio+stud.orale+stud.scrit to)/3;
return(stud);
}


/*FUNZIONE*/
void stampa_dettagli (studente_t stud)
{
printf("\n\n COGNOME ----> %s", stud.cognome);
printf("\n\n NOME ----> %s", stud.nome);
printf("\n\n PROVA DI LABORATORIO ----> %d", stud.laboratorio);
printf("\n\n PROVA SCRITTA ----> %d", stud.scritto);
printf("\n\n PROVA ORALE ----> %d", stud.orale);
printf("\n\n VOTO FINALE ----> %d\n", stud.media);
}


Grazie#include <stdio.h>
#include <stdlib.h>
#define MAX 60

/*CREAZIONE DI UNA STRUTTURA */
typedef struct {
char nome[20];
char cognome[20];
int laboratorio;
int scritto;
int orale;
int media;
} studente_t;

/*DICHIARAZIONE FUNZIONI*/
studente_t inserisci_dettagli(void);
void stampa_dettagli(studente_t stud);

int
main()
{
/*DICHIARAZIONE VARIABILI*/
studente_t studente[MAX];
int n,i;

printf ("inserire il numero degli studenti (MASSIMO 60) --->");
scanf ("%d",&n);
for (i=0;i<n;i++)
{
printf ("\n\n Inserisci i dati del %d studente ",i+1);
studente[i]=inserisci_dettagli(); /*CHIAMATA FUNZIONE*/
};

for (i=0;i<n;i++)
{
printf("\n\n I voti del %d studente sono", i+1);
stampa_dettagli (studente[i]); /*CHIAMATA FUNZIONE*/
};

system ("pause");
return(0);
}

/*FUNZIONE*/
studente_t inserisci_dettagli()
{
studente_t stud;

printf("\n\n COGNOME ----->");
scanf("%s",stud.cognome);

printf("\n\n NOME ----->");
scanf("%s",stud.nome);

printf("\n\n VOTO DELLA PROVA DI LABORATORIO ----->");
scanf("%d",&stud.laboratorio);

printf("\n\n VOTO DELLA PROVA SCRITTA ----->");
scanf("%d",&stud.scritto);

printf("\n\n VOTO DELLA PROVA ORALE ----->");
scanf("%d",&stud.orale);

stud.media=(stud.laboratorio+stud.orale+stud.scrit to)/3;
return(stud);
}


/*FUNZIONE*/
void stampa_dettagli (studente_t stud)
{
printf("\n\n COGNOME ----> %s", stud.cognome);
printf("\n\n NOME ----> %s", stud.nome);
printf("\n\n PROVA DI LABORATORIO ----> %d", stud.laboratorio);
printf("\n\n PROVA SCRITTA ----> %d", stud.scritto);
printf("\n\n PROVA ORALE ----> %d", stud.orale);
printf("\n\n VOTO FINALE ----> %d\n", stud.media);
}

MItaly
18-12-2006, 23:04
Salvane i singoli campi nel file, non vedo dove sia la difficoltà... :master:

andreadg84
18-12-2006, 23:06
cioè nn ho capito cosa intendi?
La difficoltà sta che ho imparato il C in 8 ore di lezione all'uni...troppo poche....

MItaly
18-12-2006, 23:08
Domanda: ma tu sai, al di là del caso specifico, come scrivere dati in un file?

andreadg84
18-12-2006, 23:15
so come scrivere una stringa su un file...ho studiato degli esempi


#include <stdio.h>
char c;
main()
{
FILE *p;
p=fopen("Testo.txt","a");
printf("Inserisci un testo e premi # e INVIO per salvare ed uscire!\n\n");
fprintf(p,"*************************");
while((c=getchar())!=10)
{
fputc(c,p);
}

fclose(p);
}


In questo modo scrivo la stringa, ma nn riesco a riportare questo esempio nella struttura. Ragazzuoli nn sono bravissimo, cioè i file gli ho capiti a metà, altrimenti lo avrei fatto ecco xchè vi sto chiedendo aiuto...scusatemi

andreadg84
18-12-2006, 23:23
cosi mi funziona, è giusto?

/*FUNZIONE*/
studente_t inserisci_dettagli()
{
studente_t stud;
char c;
FILE *file;
file=fopen("studente.txt", "w");

if (file==NULL)
{
printf ("Impossibile aprire il file");
}
else
{

printf("\n\n COGNOME ----->");
scanf("%s",stud.cognome);
fprintf(file,"%s", stud.cognome);
while((c=getchar())!=10)
{
fputc(c,file);
}

fclose(file);
}

MItaly
18-12-2006, 23:23
Apri il file come nel tuo esempio, stampaci il contenuto dei singoli campi con la fprintf (che funziona esattamente come la printf solo che scrive non sullo schermo ma sul file che gli passi come primo argomento) e quindi, sempre come nell'esempio, chiudi il file.


FILE *p = fopen("nomefile.ext","a");
studente_t stud;
/*popola in qualche modo la struttura
...
*/
fprintf(p, "%s\n",stud.cognome);
fprintf(p, "%s\n",stud.nome);
fprintf(p, "%d\n",stud.laboratorio);
/*eccetera*/
fclose(p);
.

andreadg84
18-12-2006, 23:31
grazie mille ci sono riuscitooooooo....scusa era proprio na cazzata, mi stavo perdendo in un bicchiere di acqua...
sai dove sbagliavo prima di aprire questo topic? praticamente nn facevo la printf ma la scanf...

MItaly
18-12-2006, 23:31
:ciauz:

Loading