gpt4 book ai didi

编译器说 :cannot convert int to FILE*

转载 作者:太空宇宙 更新时间:2023-11-04 00:22:52 26 4
gpt4 key购买 nike

在进行归档时我卡在了这里。while 循环的条件不工作。编译器说无法将 int 转换为 FILE*。

while(pFile!=EOF);

我应该将 pFile 类型化为 int 吗?我试过了,但没有用。提前致谢。完整代码为:

int main()
{
char ch;
char name[20];
FILE *pFile;
int score;
pFile=fopen("database.txt","r");
if(pFile!=NULL)
{

while(pFile!=EOF);
{
fscanf(pFile,"%c",ch);
}
}
else
printf("Cant open the file.......");
fclose(pFile);
return 0;
}

最佳答案

首先,您不想使用while (!feof(pFile))——永远!这样做几乎不可避免地会导致错误,即您从文件中读取的最后数据似乎被读取了两次。有可能让它正常工作,但只有在循环中间添加另一个检查以在达到 EOF 时退出——在这种情况下,循环条件本身将永远不会被使用(即,另一个检查是那个实际上会执行退出循环的工作)。

您通常想做的是在读取数据时检查 EOF。不同的函数以不同的方式指示 EOF。 fgets 通过返回 NULL 表示失败(包括 EOF)。大多数其他(getc、fgetc 等)确实会返回 EOF,因此您通常会得到类似这样的结果:

int ch;   // Note, this should be int, NOT char

while (EOF != (ch=getc(pFile)))
process(ch);

或:

char buffer[MAX_LINE_SIZE];

while (fgets(buffer, sizeof(buffer), pFile))
process(buffer);

使用 scanf,检查是否成功稍微复杂一些——它会返回成功转换的次数,因此您要确保与您的预期相符。例如:

while (1 == fscanf(fPfile, "%d", &input_number))
process(input_number);

在本例中,我使用了 1,因为我在格式字符串中指定了 1 次转换。但是,也有可能由于 EOF 以外的原因导致转换失败,因此如果失败,您将经常需要检查 feof(pFile)。如果它返回 false,则执行一些操作,例如读取该行的其余部分,在警告消息中将其显示给用户,然后继续读取文件的其余部分。

关于编译器说 :cannot convert int to FILE*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3549403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com