我是个 C 语言初学者,查了很多网上的资料(包括 API 文档)还是没有头绪,请了解的大佬帮忙看看。题目是用 c 代码读取一个 txt 文件,这个 txt 文件里存储了图的信息,包括节点和边,内容如下
3
a
b
c
a b
a c
b c
第一行的数字表示这个图有多少节点。我最初始的版本读取边信息用了 while 循环
#include<stdio.h>
int main(int argc, char *argv[])
{
int n;
FILE *file = fopen(argv[1], "r");
fscanf(file, "%d", &n);
// read node
char *name;
for(int i = 0; i < n; i++)
{
fscanf(file, "%s", name);
printf("read node %s\n", name);
}
//read edge
char *name1;
char *name2;
while(fscanf(file, "%s %s", name1, name2) != EOF)
{
printf("read edge %s %s\n", name1, name2);
}
}
编译无错误,执行的时候发现这个 while 循环不结束,而且输出的数据也很奇怪,如下
read node a
read node b
read node c
read edge (null) ??1?I??^H??H???PTL?F
read edge (null) ??1?I??^H??H???PTL?F
read edge (null) ??1?I??^H??H???PTL?F
read edge (null) ??1?I??^H??H???PTL?F
read edge (null) ??1?I??^H??H???PTL?F
...
请问这是为什么呢?
PS 我尝试只保留 while 读取,并且在 txt 文件里只保存边信息,发现读取结果是下面这样
read edge a (null)
read edge b (null)
read edge a (null)
read edge c (null)
read edge b (null)
read edge c (null)
从这里看好像是 fscanf 好像不支持 “%s %s”这样的 format,于是我又有了新问题:
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.