【发布时间】:2020-12-28 20:44:29
【问题描述】:
大家好,我想逐字阅读文本文件,边读边数单词,然后将单词和数字传递给我的链接列表。
但我有一个循环问题。我无法摆脱无限循环。
这是我的代码:
int main()
{
char kelime[100];
char kelime2[100];
long a = 0;
FILE * dosya = fopen("oku.txt", "r");
while(1)
{
fseek(dosya,a,SEEK_CUR);
if(feof(dosya))
{
break;
}
while(fscanf(dosya, "%99[^ \n]", kelime) == 1)
{
printf("%s \n",kelime);
a = ftell(dosya);
}
while(1)
{
fscanf(dosya, "%s" , kelime2);
printf("%s \n",kelime2);
if((strcmp(kelime, kelime2))== 0)
{
// Things to do...
}
memset(kelime2,0,sizeof(kelime2));
if(feof(dosya))
{
rewind(dosya);
break;
}
}
}
fclose(dosya);
return 0;
}
【问题讨论】:
-
为什么不简单的
while (fscanf(dosya, "%99s", kelime) == 1) { /* Add word to linked list... */ } -
我不知道我试图理解文件和 (fscanf(dosya, "%99[^ \n]", kelim) == 1) 这是我在 stackoverflow 上找到的。我尝试做的基本上是阅读每个单词并计算它们,然后传递给链表。你能修复我的代码吗?
-
以这种方式使用
feof是不正确的,也不是一个好主意。feof在尝试读取文件末尾后为真。有很多堆栈溢出答案可以解释这一点。您应该使用其他方式终止循环。例如,您可以使用fscaf的返回值,如 SomeProgrammerDude 所示。 -
你能修复并重写我的代码吗?我试过 (fscanf(dosya, "%99s", kelime) == 1) 这但并没有真正帮助。我不擅长C,我的英语也不是很好
-
fseek返回一个值得检查的值fseek