【问题标题】:Read from a file and tokenise input C从文件中读取并标记输入 C
【发布时间】:2013-05-09 22:41:33
【问题描述】:

我正在编写一段代码时遇到问题。它涉及链表和某些烦人的指针。下面是一些示例代码:

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 初始化所有 get 字符。有人可以指出我正确的方向吗?

谢谢。

示例文件

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

【问题讨论】:

  • 检查返回码总是很好
  • 确实,文件是否被成功打开是无从得知的。验证 c != NULL,然后验证 fgets != NULL 的结果。
  • 你说你有指针和东西的问题,在这种情况下你需要展示你使用的结构是如何声明和分配的,否则不可能给出直接的答案。

标签: c arrays char fgets strtok


【解决方案1】:
fgets(in, 80, cin);

这是你的问题。
你肯定是想从FILE* c阅读:

fgets(in, 80, c);

【讨论】:

  • C 中没有什么叫 cin。如果是 C++,编译器会抱怨传递给 fgets 的类型不正确。
  • 如果可以编译,那么编译器就是垃圾,需要用真实的替换。 cin 的类型是 std::istream,而不是 FILE*
  • 好吧。我会更微妙。
【解决方案2】:
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() 的返回值以处理找不到文件的情况。

【讨论】:

  • 哎呀.. Cin 的意思是 'c' 仍然无法弄清楚.. 抱歉
  • 您没有显示rootroot-&gt;head,因此很难为您提供帮助。例如你为他们分配内存吗?
猜你喜欢
  • 1970-01-01
  • 2017-01-25
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-22
  • 2021-05-07
  • 2010-09-21
相关资源
最近更新 更多