从 C 名称文件中读取字符串时出现问题

Having an issue reading a string from a file of names in C

我正在阅读一个文本文件,每个名称都有一行。我需要生成一个 0-99 之间的随机数来确定要选择的名称的索引。当我使用 fscanf() 方法然后尝试显示我读取的字符串时,输出了一个空白字符串。我已经对其进行了测试,并且正在输入 if 语句以将字符串分配给变量,分配名称似乎存在问题。

int indexOfName = rand() % 100;
        printf("%d\n", indexOfName);

        FILE *fileOfNames;
        char str[30];
        char *filename = "theFilePath";

        fileOfNames = fopen(filename, "r");
        rewind(fileOfNames);
        if (fileOfNames == NULL)
        {
            printf("Could not open file %s", filename);
            return 1;
        }
        int i = 0;
        while (fgets(str, 30, fileOfNames) != NULL)
        {
            if (i == indexOfName)
            {
                fscanf(fileOfNames, "%s", str);
            }
            i++;
        }
        printf("%s\n", str);
        fclose(fileOfNames);
        return 0;

您需要 breakif (i == indexOfName) 之后。否则,您将覆盖 str 直到到达文件末尾。

您可能甚至不想在 if 语句中使用 fscanf,因为 while (fgets(str, 30, fileOfNames) != NULL) 将行写入 str allready。

您的代码有 2 个问题:

1) 找到正确条目后继续覆盖str。您可以通过在迭代到 indexOfName 后停止来避免这种情况。

2) 将正确的值赋给 str 后,它会调用 fscanf.

再次覆盖它

为此使用 for 循环可能更有意义,因为您需要特定的迭代次数。您可以通过将 while 循环替换为以下 for 循环来使您的代码正常工作:

for (int i = 0; i < indexOfName; i++) fgets(str, 30, fileOfNames);