从 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;
您需要 break
在 if (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);
我正在阅读一个文本文件,每个名称都有一行。我需要生成一个 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;
您需要 break
在 if (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);