虽然做文件即时贴在这里.在while循环的条件不起作用.编译器说不能将int转换为FILE*.
while(pFile!=EOF);
Run Code Online (Sandbox Code Playgroud)
我应该将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;
}
Run Code Online (Sandbox Code Playgroud)
首先,你不希望使用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);
Run Code Online (Sandbox Code Playgroud)
要么:
char buffer[MAX_LINE_SIZE];
while (fgets(buffer, sizeof(buffer), pFile))
process(buffer);
Run Code Online (Sandbox Code Playgroud)
使用scanf,检查成功有点复杂 - 它返回成功转换的次数,因此您希望确保匹配您的预期.例如:
while (1 == fscanf(fPfile, "%d", &input_number))
process(input_number);
Run Code Online (Sandbox Code Playgroud)
在这种情况下我使用了1因为我在格式字符串中指定了1个转换.但是,由于EOF以外的原因,转换也可能失败,所以如果这种情况失败,你会经常想要检查feof(pFile).如果它返回false,则执行类似读取行的其余部分,在警告消息中向用户显示,然后继续读取文件的其余部分的操作.
| 归档时间: |
|
| 查看次数: |
1934 次 |
| 最近记录: |