Io in genere non testo mai in loop feof. Basta infatti testare se fgets ritorna NULL perché in quel caso vuol dire errore di I/O oppure end-of-file. Poi alla fine del ciclo puoi, se ti serve, anche differenziare tra errore e eof.
Visto che hai 4 righe "logicamente" raggruppate, le gestisci appunto con uno stato 0 1 2 3. Dopo il 3 si riazzera lo stato e si riparte. Se per caso alla fine del file ti trovi in uno stato diverso da 0, allora potresti anche stabilire che il file è ciucco ...![]()
Quindi (codice abbreviato):
Nota ancora una cosa: fgets inserisce nel buffer, se c'è spazio e la linea è più corta del buffer, il carattere '\n'. Sarebbe meglio toglierlo di mezzo visto che metti le stringhe in una struttura.codice:int stato = 0; while (fgets (......) != NULL) { switch (stato) { case 0:..... ..... case 1:..... ..... } if (++stato == 4) { /* tua funzione di inserimento */ stato = 0; } } if (stato != 0) /* il file è ciucco */ ....![]()