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;
}如果要搜索的单词出现在文件中,它就会给出正确的答案--是,否则,它就会出现分割错误(核心转储)。请帮帮我!!
发布于 2014-01-05 23:28:11
第6行: string word;C中没有string数据类型。第8行: word = GetString();您没有包含函数的定义。假设它返回一个字符串的指针,但无论如何都不会工作,因为第6行不会编译。
如果您确定的单词不超过9个字符,请使用: char word10。
发布于 2014-01-06 00:50:15
@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)的原因。
如果这些案例失败了,我们只剩下一种可能性:找到了这个词。
我希望这能帮到你!
发布于 2014-01-06 00:55:12
任何时候你的代码中都有while (!feof(f)),这几乎意味着你在错误的地方。只有在读取流的末尾之后才会设置feof()。它不表示下一次读取将是流的末尾。有关详细信息,请参阅here。
替换
while (!feof(f))
{
fscanf(f,"%s",wd);
... ...
}通过
while (fscanf(f,"%s",wd))
{
... ...
}https://stackoverflow.com/questions/20935150
复制相似问题