Salve,
ho un problema con questo pezzo di programma che dovrebbe prendere gli elementi presenti in un file ed aggiungerli ad una lista.
Come si puo' vedere dal output si presentano degli elementi che non ci dovrebbero essere .. ho supervisionato piu' volte il codice ma a me pare corretto.
il file e' un file creato in windows con il blocco note e salvato come .csv.
Proprio non capisco e sono curioso di sapere dove sta' l inghippo.
Grazie in anticipo!!!!
MAIN
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h> //sqrt(n)
#define BUF_SIZE 30
struct elemento_lista{
int dati_divisi[10]; //array che contiene in ogni posizione un dato del csv [cod,x,y,z,gg,mm,aaaa,ora,min,n_eventi]
struct elemento_lista *nodo_nextPtr;
};
typedef struct elemento_lista elemento;
typedef elemento *lista_elementi;
//prototipi di funzione
void aggiunta_coda(lista_elementi *, char *); //aggiunge gli elementi del .csv ad una lista gia' divisi
void stampa_DEBUG(lista_elementi *);
//inizio main
int main(){
char *end;
FILE *file_eventi;
lista_elementi testa = NULL;
int raggio = 0;
char nome_file[30];
//apertura file con controllo
printf("Inserisci il nome del file\n");
scanf("%s", nome_file);
//apertura file con controllo
if((file_eventi = fopen(nome_file, "r")) == NULL){
printf("Errore File\n");
return 0;
}
printf("File aperto\n");
while(1){ //aggiunge ogni stringa ad un nodo della lista concatenata
char buf[BUF_SIZE];
end=fgets(buf, 30, file_eventi);
if(end == NULL){
break;
}
aggiunta_coda(&testa, end);
}
stampa_DEBUG(&testa);
printf("AAAAAAAAAAAAAAAAAAAAAAAAAA-\n");
}
void aggiunta_coda(lista_elementi *l, char *dati){
lista_elementi new = malloc(sizeof(elemento));
new -> nodo_nextPtr = NULL;
char *endLN = strtok(dati, ",:/");
int i=0;
while(endLN!=NULL && i<9){
new -> dati_divisi[i] = atoi(endLN);
endLN = strtok(NULL, ",:/");
i++;
}
new -> dati_divisi[9] = 0;
if(*l == NULL){
*l=new;
}else{
lista_elementi corr = *l;
while(corr -> nodo_nextPtr != NULL){
corr = corr -> nodo_nextPtr;
}
corr -> nodo_nextPtr = new;
}
}
void stampa_DEBUG(lista_elementi *t){
lista_elementi corr = *t;
while(corr -> nodo_nextPtr != NULL){
printf("----\n");
for(int i=0;i<10;i++){
printf("%d", corr -> dati_divisi[i]);
printf("----");
}
corr = corr -> nodo_nextPtr;
}
}
OUTPUT
Inserisci il nome del file
file.csv
File aperto
----
565----4----6----8----11----10----2017----11----30----0--------
756----5----9----1----12----12----2017----10----40----0--------
765-----8-----2-----1----6----1----2018----23----23----0--------
0----0----0----0----0----0----0----0----0----0--------
786-----9-----3-----8----7----1----2018----16----19----0--------
0----0----0----0----0----0----0----0----0----0--------
835-----4-----6-----2----8----1----2018----0----12----0--------
0----0----0----0----0----0----0----0----0----0----AAAAAAAAAAAAAAAAAAAAAAAAAA-
FILE
565,4,6,8,11/10/2017,11:30
756,5,9,1,12/12/2017,10:40
765,-8,-2,-1,06/01/2018,23:23
786,-9,-3,-8,07/01/2018,16:19
835,-4,-6,-2,08/01/2018,00:12
835,-2,-7,-2,08/01/2018,00:12