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 = getdata(buff, dimriga, fs);
printf("%f \t %f \t %f", x.a, x.b, x.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!