永发信息网

c语言判断文件是否结束问题

答案:3  悬赏:30  手机版
解决时间 2021-02-18 12:02
  • 提问者网友:捧腹剧
  • 2021-02-18 07:34
#define LEN1 sizeof(struct user_list)
struct user_list
{
char user[20];
char code[20];
char name[20];
int power;
int num;
struct user_list *next;
};
void putong()///////////////////////////////////////////////////////////
{
FILE * fp1;
struct user_list *p1,*p2,*head,*p0;
char code[20];
fp1=fopen("user_list","rb");
if(!feof(fp1))
{
fclose(fp1);
fp1=fopen("user_list","wb");
head=(struct user_list *)malloc(LEN1);
do
{
printf("请输入用户名:");
scanf("%s",head->user);
printf("请输入密码:");
scanf("%s",head->code);
printf("请再次输入密码:");
scanf("%s",code);
if(strcmp(code,head->code)!=0)
printf("密码错误,请重新输入\n");
}while(strcmp(code,head->code)!=0);
head->num=1;
head->power=0;
head->next=NULL;
fwrite(head,LEN1,1,fp1);
fclose(fp1);
}
else
{
....
}
}

写入以上代码后一直在执行if(){。。}的内容,为什么啊??都不执行else里面的内容???生成的文件只有一个结构体。。。。
就是为什么无法将这个链表写进去呢??讲简单点的解决方法,谢谢了!!!!
最佳答案
  • 五星知识达人网友:深街酒徒
  • 2021-02-18 09:07
其实二进制方式和文本方式判断文件结束的方式是一样的,都是遇到EOF就认为文件结束,EOF是一个宏,它代表了-1这个值,如果在文件当中读到了0xff或者到了文件末尾,文件结构指针里面的flags字节的_F_EOF位都会被置为1,这一位被置为1,库函数就会认为到了文件末尾了。函数feof()其实是一个类函数宏,这个宏就是通过把文件结构指针的flags字节跟_F_EOF进行与运算来检测_F_EOF是否为1,并判断是否到了文件末尾的。这个函数具有与下面类似的代码:

#define feof(f) ((f)->flags & _F_EOF)

对于flags和_F_EOF,不同的编译器可能有不同的标识符。

feof是返回值为0表示遇到文件末尾的。上述那个_F_EOF应该是被置为0表示文件末尾,而feof是通过检测flags跟_F_EOF相与的结果是否为0来判断文件是否到了末尾。

另外提醒一下。刚刚查阅了一些更详细的资料,发现我所说的那种把-1当作文件结束标记的情况并非发生在所有的操作系统上。某些操作系统特别是早期的操作系统有不少就把-1看作文件结束标记,但现在的操作系统多数来说不再以这种方法判断文件结束,而是直接比较文件的大小,DOS、windows和一部分unix/linux就是以文件大小来判断的,当超过文件大小读的时候,就会设置_F_EOF和_O_EOF位。
全部回答
  • 1楼网友:洎扰庸人
  • 2021-02-18 10:59
fp1是指针,把if(!feof(fp1))中的fp1改为*fp1
  • 2楼网友:慢性怪人
  • 2021-02-18 10:00
文件为空时 只有文件结束符eof 当读取第一个字符是eof时即可判断文件是不是空 #include #include void main() { file *fp; char ch; if((fp=fopen("1.txt","r"))==null) { printf("error!\n"); exit(0); } ch=fgetc(fp); if(ch==eof) printf("文件为空\n"); else printf("文件不为空\n"); } ch就是获取到的文件里面的内容 fgetc(fp)这个函数就是获取文件内容的函数 从文件头开始 一直取到文件尾。。每调用这个函数一次 就会取出文件中的下一个字符 一直到文件尾为止 其中你的那个1.txt要放在和你程序相同的文件夹内
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯