Codice: Seleziona tutto
while(1){...}Codice: Seleziona tutto
/* disp.c */
/* Visualizzazione del file passato come argomento da linea di comando */
/*
TIPO FILE: ASCII
I campi sono separati da ',' le struct da '\n'.
I campi sono lunghi al massimo MAXLENGHT.
Il nome del file da creare è dato da command line.
*/
#define MAXLENGHT 30
#include <stdio.h>
#include <stdlib.h>
main(int argc, char *argv[])
{
FILE *inFile; /*puntatore a file */
char str1[MAXLENGHT];
char str2[MAXLENGHT];
char str3[MAXLENGHT];
int i ,c;
struct tscheda{ /* definisce la struttura per i record */
char *nome;
int anno_nascita;
char *citta;
char *stato;
}myrecord; /* istanzia la variabile di tipo tscheda */
if (argc != 2) { /* gestisce la situazione in cui non venga passato nessun argomento (o troppi argomenti) */
printf("Uso: %s nomefile\n", argv[0]);
exit (1);
}
inFile = fopen (argv[1], "r"); /* ottiene il puntatore al file */
if (inFile == NULL) { /* controllo esistenza del file passato come argomento */
printf("%s: File Inesistente!\n", argv[1]);
exit(1); /* esce con disprezzo ;) */
}
while (1) { /******** Questo è il ciclo continuo che voglio interrompere raggiunta la fine del file, MA COME???? *****/
i = 0;
while ((c = getc(inFile)) != ',')
str1[i++] = c;
str1[i] = '\0';
myrecord.nome = str1;
fscanf(inFile, "%d", &myrecord.anno_nascita);
getc(inFile); /* virgola */
i = 0;
while ((c = getc(inFile)) != ',')
str2[i++] = c;
str2[i] = '\0';
myrecord.citta = str2;
i = 0;
while ((c = getc(inFile)) != '\n')
str3[i++] = c;
str3[i] = '\0';
myrecord.stato = str3;
printf("%s %d %s %s\n", myrecord.nome, myrecord.anno_nascita, myrecord.citta, myrecord.stato);
}
printf("fuori\n"); /* il flusso del programma (ovviamente e purtroppo) non arriva mai qui */
return(fclose(inFile));
} /* il programma produce l'output corretto ma non esce correttamente con fclose() - ottengo 'segmentation fault' */Codice: Seleziona tutto
while(1){...}Codice: Seleziona tutto
if(<condizione di fine del file> break;)Per favore qualcuno mi può dare un suggerimento? E' questo il motivo per cui ottengo 'segmentation fault' benchè l'output venga presentato correttamente?
Grazie a tutti per l'attenzione e ancor più grazie a coloro i quali mi daranno la soluzione
