2013-05-15 27 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

好吧。我会更微妙。 –