c - 从文件中读取多行关键字作为字符数组?在 C 中

标签 c arrays character

您好,我正在尝试从输入文件中读取文本行。该文件可以包含多个关键字。每个关键字由行尾分隔。我可以假设关键字不会超过 30 个字符。到目前为止,我只能读取一个关键字,然后循环结束。如何在到达文件末尾之前读取多个关键字。我想将每个关键字存储到不同的字符数组中。这是我目前所拥有的。

char readKeywords()
{
    FILE *finn;
    char array2[30];
    int i = 0;
    finn = fopen("cp3Keywords.txt", "r");
    while (fscanf(finn, "%c", &array2[i]) != '\n')
    {
        i++;
    }

}

最佳答案

好的,你这里有几个问题。

  1. fscanf 返回值是读取的项目数,在本例中始终为 1。

  2. 循环似乎打算在您读取换行符时结束,而不是在您到达文件末尾时结束。

这样的事情怎么样:

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/

相关文章:

在 C 中使用函数更改字符串数组内容

fortran - 如何将 NULL 字符连接到 Fortran 中的字符数组以调用 c 函数?

c - 将一维数组作为二维数组访问

php - PHP中遍历多维数组的递归方法

string - 如何获取 Golang 字符串的最后 X 个字符?

bash - 不可能的 bash : syntax error: invalid arithmetic operator (error token is "")

c - 从二维数组中的字符串中删除最后一个字符

c - 如何将另一个程序的输出作为管道传递到我的程序?

c - C Scanf For循环关闭1

javascript - 在 JavaScript 中循环遍历数组