永发信息网

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

答案:3  悬赏:30  手机版
解决时间 2021-02-18 12:02
#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里面的内容???生成的文件只有一个结构体。。。。
就是为什么无法将这个链表写进去呢??讲简单点的解决方法,谢谢了!!!!
最佳答案
其实二进制方式和文本方式判断文件结束的方式是一样的,都是遇到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位。
全部回答
fp1是指针,把if(!feof(fp1))中的fp1改为*fp1
文件为空时 只有文件结束符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要放在和你程序相同的文件夹内
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
以下不属于《银行业从业人员职业操守》所规定
新世纪游泳馆地址在什么地方,想过去办事,
我是卖成人用品的,开的实体店,有人再我这买
谁能给我一个实名注册的QQ号,事成之后给100
《 大卫·科波菲尔 》查尔斯 狄更斯 总结所有
请问数控这行业 工资会给多少 师傅这资质
用巧夺天工和喜出望外造句用巧夺天工和喜出望
不到两年时间,松下等离子电视就出现整屏红屏
寿光市营里镇北单村民委员会地址有知道的么?
104÷(1、69÷13x8)怎简算
财务控制的要素包括()。
我觉得仙剑6做的挺好的,为什么还有那么多人
我的手机是三星s7e,连我家的无线网明明连接上
含敏字的四字成语
美廉百货超市唐昌店在哪里啊,我有事要去这个
推荐资讯
带暗的哪些成语
a+b+c=61,a+c+d=71,a+b+d=62,b+c+d=64,请问怎
尼桑阳光故障一键启动马达无反应
女性尿液有泡沫是有病吗
ebay付款,银联付款后转账到paypal一般要多久,
重庆亿耳聪助听器我是神经性耳鸣有八年了现在
和大人包子店怎么去啊,有知道地址的么
承包快递公司,开一个小小的快递公司需要多钱
织一双毛线棉鞋需要多少线
武功山嵘源国际温泉度假酒店 吉安怎么样
黄山市有几大五金市场及地址在哪?
三星note3n9006用联通卡还是移动卡好
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?