PDA

Visualizza la versione completa : [C] Lettura di oggetti struct da file


esoni
10-03-2011, 17:46
ciao ragazzi vi dico il mio problema
ho un file organizzato cosi
Rossi:Mario:234445
Bixio:Nino:435678
Garibaldi Giuseppe 787899

devo realizzare un programma c che mi carichi DAL FILE ogni studente in un vettore di tipo studente .
il tipo studente è cosi definito



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



io avevo pensato a qualcosa del genere




#include<stdio.h>

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

int main(){
FILE * f;
int i=0;
studente v [10] ;
f=fopen("lista","r");
while (fscanf(f, ”"%s:%s:%d"”, v[i].nome, v[i].cognome, &v[i].matricola)==1)
i++;

}



ma il compilatore mi da vari errori del tipo
studenti.c14: error stray '\342' in program e altri simili

HELP ME

lolide
10-03-2011, 19:41
Sbaglio o nella linea 14 (che dovrebbe essere questa, perchè potevi anche segnarla tu)


while (fscanf(f, ”"%s:%s:%d"”, v[i].nome, v[i].cognome, &v[i].matricola)==1)


ci sono degli apici di troppo ?

esoni
10-03-2011, 20:59
hai ragione scusa, correggendo l errore e semplificando ulteriormente il problema,supponiamo che voglio caricare solo il primo studente nel vettore e stampare il suo contenuto il codice è
fscanf(f, "%s:%s:%d", v[0].nome, v[0].cognome, &v[0].matricola)
printf(" %s %s %d", v[0].nome, v[0].cognome, v[0].matricola);

ma invece di stampare Rossi Mario 2334445 mi stampa
Rossi:Mario:234445e altre schifezze, come mai?
in poche parole la fscanf non formatta come si deve l input

lolide
10-03-2011, 22:28
Succede perchè usi una struct troppo grande.
Cioè nome è di 20 byte, quindi fscanf copierà 20 byte in nome, altri 20 byte in cognome e 2 byte in matricola.
fscanf fa una copia byte-byte, quindi dovresti magari riempire il resto dei byte con degli spazi fino ad arrivare a linee precise di 42 byte.

esoni
11-03-2011, 07:44
qindi una possibile sol?

Loading