PDA

Visualizza la versione completa : [C] programma che seleziona numeri da un file


zeddicus
02-08-2011, 21:31
ciao a tutti, ho studiato un po' di C per l'universitā e mi serve di fare un programma che faccia le seguenti cose:
prenda un file di testo (contenente righe di numeri separati da tab);
per un numero di righe arbitrario (massimo 100), ne prenda una riga alla volta e ne salvi i primi 3 numeri;
stampi su schermo i numeri salvati riga per riga;

questa č il mio tentativo:

struct line {float a; float b; float c;}; /* definisce il tipo "dato" fatto da a, b, c */
typedef struct line dato;

/* funzione che restituisce il dato successivo dal file */
dato getdata(char array[], int dim, FILE *stream)
{ dato value;
fgets(array, dim, stream); /* legge la prossima riga */

fscanf(stream, "%f", & value.a); /* salva i primi 3 numeri in a, b e c */
fscanf(stream, "%f", & value.b);
fscanf(stream, "%f", & value.c);

return value;
}


int main()
{
const int dimriga=5000;
FILE *fs, *fopen();
int i,n;
dato x[100];
char nomefile[100], buff[dimriga];

printf("file da aprire: ");
scanf("%s", nomefile); /* seleziona il file da leggere */

fs = fopen(nomefile, "r");
if( fs==NULL ) {
perror("Errore in apertura del file");
EXIT_FAILURE;
} /* mette il file nello stream in modo lettura, oppure restituisce errore */

printf("Quante righe vuoi leggere? ");
scanf("%d \n", &n);

for(i=0; i<n; i++) {
x[i] = getdata(buff, dimriga, fs);
printf("%f \t %f \t %f", x[i].a, x[i].b, x[i].c);
};

/* pulisce e chiude lo stream */
fflush(fs);
fclose(fs);

}


la compilazione non dā errori, tuttavia quando lo eseguo mi si ferma dopo aver messo il numero di righe voluto =( cosa ho sbagliato?

grazie a tutti!

dario09
03-08-2011, 14:04
una cosa che o notato e' che hai messo un punto virgola dopo aver chiuso con la parentesi graffa il ciclo for


for(i=0; i<n; i++) {
x[i] = getdata(buff, dimriga, fs);
printf("%f \t %f \t %f", x[i].a, x[i].b, x[i].c);
};

ciao.

Loading