您好,我正在尝试从输入文件中读取文本行。该文件可以包含多个关键字。每个关键字由行尾分隔。我可以假设关键字不会超过 30 个字符。到目前为止,我只能读取一个关键字,然后循环结束。如何在到达文件末尾之前读取多个关键字。我想将每个关键字存储到不同的字符数组中。这是我目前所拥有的。
char readKeywords()
{
FILE *finn;
char array2[30];
int i = 0;
finn = fopen("cp3Keywords.txt", "r");
while (fscanf(finn, "%c", &array2[i]) != '\n')
{
i++;
}
}
最佳答案
好的,你这里有几个问题。
fscanf 返回值是读取的项目数,在本例中始终为 1。
循环似乎打算在您读取换行符时结束,而不是在您到达文件末尾时结束。
这样的事情怎么样:
int getNextKeyword(FILE *fp, char *result) {
int c;
while (EOF != (c = fgetc(fp))) {
if (c == '\n') break;
*result++ = c;
}
*result = 0;
return c;
}
这会消耗字符直到下一个换行符或 EOF。它将结果累积在提供的输入缓冲区中。当您遇到换行符或 EOF 时,您会在缓冲区中写入 0,从而生成一个标准的以 null 结尾的字符串。它返回最后写入的字符。然后你再写一些代码在循环中调用这个函数,直到它返回 EOF。
请注意变量 c 是 int 类型,而不是 char 类型。那是因为 EOF(从 fgetc 返回的文件结束值)不能表示为一个字符。所以如果你写 字符 c; c = fgets(fp); 如果 (c == EOF) ... 它永远不会是真的。这是一个常见的 C 编程错误。
所以调用代码可能是这样的:
FILE *fp = fopen("cp3Keywords.txt", "r");
char array2[30];
while (EOF != readKeyword(fp, array2)) {
// Do what you want to do with the keyword
}
关于c - 从文件中读取多行关键字作为字符数组?在 C 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536288/