c语言判断文件是否结束问题 50
#defineLEN1sizeof(structuser_list)structuser_list{charuser[20];charcode[20];charname[...
#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里面的内容???生成的文件只有一个结构体。。。。
就是为什么无法将这个链表写进去呢??讲简单点的解决方法,谢谢了!!!! 展开
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里面的内容???生成的文件只有一个结构体。。。。
就是为什么无法将这个链表写进去呢??讲简单点的解决方法,谢谢了!!!! 展开
2个回答
展开全部
其实二进制方式和文本方式判断文件结束的方式是一样的,都是遇到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位。
#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位。
2012-07-20
展开全部
fp1是指针,把if(!feof(fp1))中的fp1改为*fp1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询