PDA

Visualizza la versione completa : [C] Salvare dati di una struttura su un file


Donnie85Darko
15-05-2009, 00:10
ciao a tutti avrei bisogno di un grandissimo aiuto spero sia la sezione giusta..

devo realizzare un programma che prenda in input vari dati tramite delle strutture dopo di che salvarle in un file.. il programma l'ho fatto e logicamente sembra corretto solo che ogni volta mi da la prima riga sballata(non di termini immessi da me) e dopo la seconda iterazione crashia e non riesco a capire il perchè.. qualcuno puo gentilmente darmi una mano??? il codice è questo:



#include<stdio.h>
#include<stdlib.h>

struct Insegnamenti {
int CD_Ins;
char Nome[40];
int Anno;
int Sem;
int CFU;};

int main()
{

FILE *Insegnamento;

int i;
i=1;
struct Insegnamenti Pos[i];
if ((Insegnamento = fopen("Insegnamenti.bak", "wt")) == NULL)
printf("\nNon posso aprire il file di input.\n");
else
while(Pos[i].CD_Ins!=-1){
printf("dammi il codice dell'insegnamento\n");
scanf("%d", &Pos[i].CD_Ins);

if(Pos[i].CD_Ins!=-1){
printf("Immeti il nome dell'insegnamento\n");
scanf("%s",&Pos[i].Nome);

do{
printf("Inserisci l'anno del corso\n");
scanf("%d",&Pos[i].Anno);
if(Pos[i].Anno>3)
printf("Gli anni sono 3 non %d\n\n",Pos[i].Anno);}
while(Pos[i].Anno>3);

do{
printf("A che semestre appartiene\n");
scanf("%d",&Pos[i].Sem);
if(Pos[i].Sem>2)
printf("I semestri sono 2\n\n");}
while(Pos[i].Sem>2);

do{
printf("inserisce i CFU\n");
scanf("%d", &Pos[i].CFU);
if(Pos[i].CFU>18)
printf("Non ti sembrano un po troppi??\n\n");}
while(Pos[i].CFU>18);

printf("%5d%10s%5d%5d%5d\n",Pos[i].CD_Ins,Pos[i].Nome,Pos[i].Anno,Pos[i].Sem,Pos[i].CFU);

fprintf(Insegnamento,"%5d%10s%5d%5d%5d\n",Pos[i].CD_Ins,Pos[i].Nome,Pos[i].Anno,Pos[i].Sem,Pos[i].CFU);

}}
fclose(Insegnamento);


system("PAUSE");
}


il compilatore usato e dev-c spero che qualcuno mi possa aiutare dato che sto uscendo matto
:dhò:

oregon
15-05-2009, 01:24
Dichiari un solo elemento strutturato con

struct Insegnamenti Pos[i];

dato che i = 1 e poi utilizzi direttamente l'indice 1 ... ti ricordo che i vettori in C lavorano in base 0 ...

Inoltre nel ciclo

while(Pos[i].CD_Ins!=-1)

i non varia mai ...

Donnie85Darko
15-05-2009, 01:36
chiedo scusa ho dimenticato i++ fra queste 2 linee

fprintf(Insegnamento,"%5d%10s%5d%5d%5d\n",Pos[i].CD_Ins,Pos[i].Nome,Pos[i].Anno,Pos[i].Sem,Pos[i].CFU);
i++;
}}
fclose(Insegnamento);

scusa mo non ho capito bene che intendi con definisco una sola struttura se mi diresti come modificarlo mi faresti un grosso favore..perchè non ho la più pallida idea di che cosa stai parlando...

ti chiedo scusa per il disturbo

LeleFT
15-05-2009, 08:24
Leggere il regolamento prima di postare:

1) Titolo non conforme
2) Mancano i tag code nel codice.

Sistemo io.


Ciao. :ciauz:

Loading