0
所以,我的問題很簡單,我必須從txt文件中讀取一組數據(2個字符串和幾個整數)。每個數據都由\ n字符分隔。問題是,而不是實際讀取的數據,我得到段錯誤,這是我對於這部分代碼:C無法在txt模式下從FILE初始化列表
if(head == NULL){ //if the list is empty I want to read data from the file
fp=fopen("elementi.txt", "r");
if(fp==NULL) {printf("File non esistente"); exit(2);} //this is just a dumb error line
else {
while(fgets(buffer.info.nome,20,fp)!=NULL){
nl_eat(buffer.info.nome); //this function eliminate the '\n' from the string just read
fgets(buffer.info.artista,20,fp);
nl_eat(buffer.info.artista);
fscanf(fp, "%d%*c", buffer.info.data_uscita.anno);
fscanf(fp, "%d%*c", buffer.info.data_uscita.mese);
fscanf(fp, "%d%*c", buffer.info.data_uscita.giorno);
fscanf(fp, "%f%*c", buffer.info.prezzo);
addFine(&head,buffer); //adds the read element at the end of the list
}
fclose(fp);
}
}
所以我想給更多的信息,緩衝區就是nodo是
typedef struct Data {
int anno;
int mese;
int giorno;
} data;
typedef struct cd {
char nome[25];
char artista [20];
data data_uscita;
float prezzo;
} CD;
struct Nodo{
CD info;
struct Nodo *next;
};
typedef struct Nodo nodo;
鍵入nodo
我試圖寫一個小例子,這裏是全碼:www.pastebin.com/hLTj8ZG4
歡迎來到Stack Overflow。請儘快閱讀[關於]頁面。你的循環測試'fgets()'的效果是好的;如果你檢查了每個'fscanf()'調用和額外的'fgets()'都可以工作,那麼它會更好。如果'buffer.info.data_uscita.anno'是一個整數指針而不是一個整數,那麼你有一個不尋常的數據結構。與其他數字輸入類似。你的編譯器沒有警告你?如果沒有,找到編譯器警告(如果使用'gcc',最低限度'gcc -Wall')。另外,最後一個'fscanf()'離開換行符,被主循環中的'fgets()'讀取。 –
@ user3232752你有沒有嘗試像[valgrind](http://valgrind.org/)這樣的分析工具? –
@ wesley.mesquita:堅果,見大錘;大錘,這是堅果。沒有動態內存分配的證據,這限制了'valgrind'可以幫助的數量。別誤會我的意思; 'valgrind'是一個很棒的工具。不過,我不確定這對代碼有幫助。 –