【发布时间】:2016-08-22 11:28:32
【问题描述】:
我需要阅读以下文本文件:
2 2
Kauri tree
Waterfall
0 0 W S
0 1 E N
我想使用scanf 获取第一行,并使用fgets 获取第二行和第三行,然后再次使用scanf 获取其余行。
我这样写代码:
#include <stdio.h>
#define NUM_OF_CHAR 2
int main()
{
int node, edge;
scanf("%d %d", &node, &edge);
FILE* fp;
fp = stdin;
char* str[NUM_OF_CHAR]; //should be char str[NUM_OF_CHAR];
for (int i = 0; i < node; i++) {
fgets(str[i], 2, fp); //should be fgets(str, 2, fp);
}
printf("%s", str[0]); //printf("%s", str);
}
我输入的是:
2 2
hello
我收到了Segmentation fault
我在这里看到了一个类似的问题,有人提到我可以调用fgets 一次以获取第一行但忽略它,然后再次使用fgets 获取第二行。但我不知道该怎么做。
【问题讨论】:
-
使用 fgets() 然后 strtok() 来拆分字符串。
-
至于你的当前问题,你得到的崩溃,现在想想。你声明了一个指向
char的指针数组,但你从来没有让这些指针真正指向任何地方。 -
嗨,马特。感谢回复。我是 c 的新手。我不知道如何使用 strtok()。我现在去查一下。
-
你还有一个问题,那就是你得到的第一行
fgets(在你解决了指针问题之后)将是empty。那是因为之前的scanf没有读取上一行末尾的换行符,所以fgets将其视为空行。 -
嗨约阿希姆。谢谢。我以为我在 for 循环中使用了它们。我该如何解决?