PDA

Visualizza la versione completa : [C] Creazione di struttura da file


jurij7
02-04-2009, 18:15
ciao a tutti
da un file in ingresso con dei dati vorrei leggere ogni campo ed inserirlo in una struttura per poi eleborarli (ordine crescente, alfabetico, ecc)
il codice è questo..ho fatto una prova ma non so se funzona



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

/*
*
*/
int main() {

struct studenti {
int ordi;
char cogno[20];
int vot;
}studente;

int ordine;
char cognome[20];
int voto;

int i;
int n = 10;

FILE *cfPtr; /*cfPtr = punta al file ingresso.txt*/

/*fopen apre il file*/
if ((cfPtr = fopen("ingresso.txt", "w")) == NULL){
printf ("Il file non può essere aperto");
}

else{
printf ("Inserisci ordine, cognome, ed il voto : \n");
printf ("Inserisci EOF per terminare l'inserimento \n");
scanf ("%d%s%d", &ordine, cognome, &voto);

/*scrive nel file*/

while (!feof(stdin)){
fprintf (cfPtr, "%d %s %d\n", ordine, cognome, voto);
scanf ("%d%s%d", &ordine, cognome, &voto);
}

fclose(cfPtr);

}





/*fopen apre il file*/
if ((cfPtr = fopen("ingresso.txt", "r")) == NULL){
printf ("Il file non può essere aperto");
}
else{
printf ("%15s%15s%15s","Ordine","Cognome","Voto\n");
fscanf (cfPtr, "%d%s%d", &ordine, cognome, &voto);
studente[0].ordi = ordine);
strcpy(studente[0].cogno,cognome);
studente[0].vot = voto;
i++;

while (!feof(cfPtr)){
printf ("%15d%15s%14d\n", ordine, cognome, voto);
fscanf (cfPtr, "%d%s%d", &ordine, cognome, &voto);

studente[i].ordi = ordine;
strcpy(studente[i].cogno,cognome);
studente[i].vot = voto;
i++;

}

}




fclose(cfPtr);
system("PAUSE");




return 0;
}

jurij7
02-04-2009, 18:55
qualcuno sa dirmi dove sbaglio?

oregon
02-04-2009, 20:42
Non sai se funziona ... ? Non puoi essere piu' preciso ...?

Altrimenti avrai poche risposte perche' non tutti hanno il tempo di provare il codice ...

jurij7
02-04-2009, 20:55
esatto non so se funziona...ho provato a mettere una printf per vedere se mi stampava la struttura..ma non me lo fa..quindi nonso se funziona

oregon
02-04-2009, 21:00
Originariamente inviato da jurij7
esatto non so se funziona...

Non ha molto senso scrivere del codice e poi mandarlo in un forum per far cercare agli altri gli errori ... bisogna sbatterci la testa un bel po' di tempo, facendo tutte le prove del caso, ovvero facendo un bel po' di debugging ...


ho provato a mettere una printf per vedere se mi stampava la struttura..ma non me lo fa..

E continua a cercare ... fai altre prove, esamina il valore delle variabili, prima e dopo le varie operazioni, rivedi tutte le righe ...

Per cominciare, il programma non e' compilabile, perche' da' degli errori ... comincia da quelli ...

jurij7
02-04-2009, 23:55
scusate sono stato sinora a cercare l'errore ma non ci sono riuscito
ho trovato qualcosa che non andava tipo la definizione del numero di elementi della struct..ma non va uguale..ecco l'ultimo che ho fatto



#include <stdio.h>
#include <stdlib.h>
#define n 10
/*
*
*/
int main() {

struct studenti {
int ordi;
char cogno[20];
int vot;
}studente[n];

int ordine;
char cognome[20];
int voto;

int i = 0;


FILE *cfPtr; /*cfPtr = punta al file ingresso.txt*/

/*fopen apre il file*/
if ((cfPtr = fopen("ingresso.txt", "w")) == NULL){
printf ("Il file non può essere aperto");
}

else{
printf ("Inserisci ordine, cognome, ed il voto : \n");
printf ("Inserisci EOF per terminare l'inserimento \n");
scanf ("%d%s%d", &ordine, cognome, &voto);

/*scrive nel file*/

while (!feof(stdin)){
fprintf (cfPtr, "%d %s %d\n", ordine, cognome, voto);
scanf ("%d%s%d", &ordine, cognome, &voto);
}

fclose(cfPtr);

}





/*fopen apre il file*/
if ((cfPtr = fopen("ingresso.txt", "r")) == NULL){
printf ("Il file non può essere aperto");
}
else{
printf ("%15s%15s%15s","Ordine","Cognome","Voto\n");
fscanf (cfPtr, "%d%s%d", &ordine, cognome, &voto);
studente[i].ordi = ordine;
strcpy(studente[i].cogno,cognome);
studente[i].vot = voto;
i++;

while (!feof(cfPtr)){
printf ("%15d%15s%14d\n", ordine, cognome, voto);
fscanf (cfPtr, "%d%s%d", &ordine, cognome, &voto);

studente[i].ordi = ordine;
strcpy(studente[i].cogno,cognome);
studente[i].vot = voto;
i++;

}
}

printf ("\nStampa ordinata\n");
printf ("%25s%25s%30s\n","ORDINE,"COGNOME","VOTO");
for (i = 0; i < n; i++){
printf ("%25s%25s%30d", studente[i].ordi, studente[i].cogno, studente[i].vot);
}




fclose(cfPtr);
system("PAUSE");




return 0;

}

oregon
03-04-2009, 00:03
Esiste ancora un errore di compilazione ... nella riga dove c'e'

cantanti

...

jurij7
03-04-2009, 00:18
si infatti...ora mi scrive (della stampa della struttura) solo le intestazioni cioè
'stampa ordinata' e ORDINE COGNOME VOTO..ma non gli elemtni della struttura

oregon
03-04-2009, 00:23
Mi sembra molto strano che tu abbia eseguito il programma dato che hai scritto

studenti[i].vot

e continua a non compilare dato che dovrebbe essere

studente[i].vot

E comunque la for

for (i = 0; i <= n; i++)

deve essere < e non <=

jurij7
03-04-2009, 00:26
si scusa quelle le avevo gia corrette

Loading