2013-05-15 28 views
1

我遇到了我正在編寫的一段代碼的問題。它涉及鏈表和某些惱人的指針。下面是一些示例代碼:從文件和令牌輸入中讀取C

PersonType *person; 
FILE *c; 
c = fopen("file.csv", "r"); 
char in[100]; 
fgets(in, 80, c); //Edited 

root->head->next = 0; 
char *getNum = strtok(in, ";"); 
char *getName = strtok(NULL, ";"); 
char *getHome = strtok(NULL, ";"); 
strcpy(root->head->getNum, getNum); 
strcpy(root->head->getName, getName); 
strcpy(root->head->getHome, getHome); 
person = root->head; 
if(person != 0){ 
    while(person->next != 0){ 
     person=person->next; 
    } 
} 
//DEGUG 
printf("Successfully Made a Person NODE"); 

代碼將無法從文件中讀取和我完全難倒爲什麼。在XCODE調試器/跟蹤器中,它用nil初始化所有的獲取字符。有人可以請指點我正確的方向嗎?

謝謝。

示例文件

P1;Elyza;45 Random RD 
P2;Ian;78 Shark CL 
+1

總是好的檢查代碼返回 –

+0

事實上,沒有告訴文件是否被成功打開與否。驗證c!= NULL,然後驗證fgets!= NULL的結果。 – Lundin

+0

你說你有指針和東西的問題,在這種情況下,你需要展示你使用的結構是如何聲明和分配的,否則不可能給出直接的答案。 –

回答

1
c = fopen("file.csv", "r"); 
char in[100]; 
fgets(in, 80, cin); 

你可能是指

c = fopen("file.csv", "r"); 
char in[100]; 
fgets(in, 80, c); // <--- 

也請務必從fopen()檢查返回值來處理該文件沒有找到的情況。

+0

哎呀..CIN的意思是'c'仍然無法弄清楚..對不起 – user2385509

+0

你沒有顯示'root'和'root-> head',所以很難幫助你。例如你爲他們分配內存嗎? –

0
fgets(in, 80, cin); 

這是您的問題。
當然你的意思是從FILE* c閱讀:

fgets(in, 80, c); 
+0

C中沒有什麼叫cin了,如果它是C++,編譯器會抱怨傳遞給fgets的類型不正確。 – Lundin

+0

如果它編譯,那麼編譯器是廢話,需要用一個真正的替換。 'cin'的類型是'std :: istream',而不是'FILE *'。 – Lundin

+0

好吧。我會更微妙。 –