我在我的 C 程序中编写了以下函数。该程序加载一个文本文件 (Les Miserables Vol. I) 以及另一个包含 20 个字符名称的文本文件。此函数的目的是逐行扫描整个文件,并计算 20 个名称中任何一个名称出现的次数。
NumOfNames
= 20。
Names
是从 Names[1]
- Names[20]
中存储的 20 个名称的数组。
MaxName
是一个全局整数变量,我想存储整个文件中名称出现的总数(它应该是数百甚至数千)。
编辑: 函数执行后,MaxName 的值为 4。我完全不知道哪里出错了,但似乎我在整个函数中犯了几个错误.一个似乎是它只执行了 for 循环的第一次迭代,即它只搜索 Name[1]
,但是名字在文件中出现了 196 次,所以它仍然无法正常工作只是名字。
void MaxNameAppearances()
{
char LineOfText[85];
char *TempName;
FILE *fpn = fopen(LesMisFilePath, "r+");
for(i = 1; i<=NumOfNames; i++)
{
while(fgets(LineOfText, sizeof(LineOfText), fpn))
{
TempName = strstr(LineOfText, Names[i]);
if(TempName != NULL)
{
MaxName++;
}
}
}
fclose(fpn);
}
我想代码的一个问题是它必须在每次 i
迭代时读取文件。尝试像这样重新排序循环:
while(fgets(LineOfText, sizeof(LineOfText), fpn))
{
for(i = 1; i<=NumOfNames; i++)
{
TempName = strstr(LineOfText, Names[i]);
if(TempName != NULL)
{
MaxName++;
}
}
}
这会读取一行,检查该行中所有名称的出现,然后继续下一行。
如果按照您的方式进行,您将已经到达 i == 1
的文件末尾。
我是一名优秀的程序员,十分优秀!