int main()
{
FILE *f;
f=fopen("words.txt","r");
char wd[10];
string word;
printf("Enter a word to be searched\n");
word=GetString();
while (!feof(f))
{
fscanf(f,"%s",wd);
//printf("%s\n",wd);
if(strcmp(word,wd)==0)
{
printf("Yes\n");
break;
}
}
fclose(f);
return 0;
}
如果要搜索的单词存在于文件中,则表示正确的答案是“是”,否则,它会给出分段错误(核心转储)。 请帮忙!!
答案 0 :(得分:0)
第6行:字符串; C中没有字符串数据类型。并且, 第8行:word = GetString(); 您没有包含函数的定义。假设它返回指向字符串的指针,但无论如何都无法工作,因为第6行将无法编译。
如果您确定的单词不超过9个字符,请使用:char word [10]。
答案 1 :(得分:0)
@gnometorule是正确的。你再读一次你需要的时间。如果您检查了返回值,则会发现fscanf
可能已返回EOF
。只要fscanf
返回预期值,您要做的就是读取文件。由于您正在阅读1项,因此应返回1.如果不是,则表示存在问题。此外,feof
仅在达到文件末尾时才为真。如果有读错误怎么办?您可能正在尝试从设置了错误指示符的文件中读取,feof
将无法检测到该文件。
查看以下代码。它应该让您了解如何处理文件。
/* This is used to determine whether an end-of-file error message should be printed or the word was found. */
int cmp_result;
/* Stop reading when the file can't be read or the words are equal. */
do
cmp_result = strcmp(word, wd);
while (fscanf(f, "%s", wd) == 1 && cmp_result != 0);
/* Check for a file read error. */
if (ferror(f))
printf("Error reading file\n");
/* End of file reached before words are equal; feof(f) may be true when cmp_result==0 or not, so checking cmp_result is more reliable in this case. */
else if (cmp_result != 0)
printf("Word '%s' not found\n", word);
/* Words are equal. */
else
printf("Yes\n");
逻辑是如果退出循环,则会出现读取错误或找到该单词。循环测试后的分支语句。
首先,检查文件的错误指示符。如果未设置,则到达文件末尾或找到单词。
如果找到该单词,则可以设置文件结束指示符。但是如果找不到单词,则必须设置文件结束指示符,否则循环不会退出,因为我们已经排除了第一个if语句中的错误指示符。这就是我们检查比较结果而不是使用feof(f)
。
如果这些案件失败,我们就有一种可能性:找到了这个词。
我希望这有帮助!
答案 2 :(得分:0)
任何时候while (!feof(f))
都在您的代码中,几乎意味着您处于错误的位置。只有在读取流的末尾后才会设置feof()
。它并不表示下一次读取将是流的结束。有关详细信息,请参阅here。
替换
while (!feof(f))
{
fscanf(f,"%s",wd);
... ...
}
通过
while (fscanf(f,"%s",wd))
{
... ...
}