int signin()
{
int flag = 1;
char name[20];
char password[20];
printf("请输入账号:>\n");
scanf("%s", name);
printf("请输入密码:>\n");
scanf("%s", password);
FILE * fp;//创建文件指针
struct Account account;
if ((fp = fopen("account.text","r+")) == NULL)
{
printf("登陆失败!账号不存在!\n");
return 0;
}
fread(&account, sizeof(account), 1, fp);//从fp中读取数据到结构体中
while (!feof(fp)) //文件遍历
{
if (!strcmp(account.name, name) && !strcmp(account.password, password))
{
flag = 0;//登陆成功返回0
strcpy(signname, account.name);//记录当前登陆账号
strcpy(signpassword, account.password);
fclose(fp);
return(flag);
}
fread(&account, sizeof(account), 1, fp);//从fp中读取数据到结构体中
}
fclose(fp);
return(flag);
}
stuff.text文件中的内容为
结果:
调试了一下发现while直接就没进去,问题到底出在哪呀?
feof是C语言标准库函数,其原型在stdio.h中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值,文件未结束,返回0值)
已经遇到结尾,所以while循环不执行。
不妨使用fscanf去获取文件中的数据。
你文件里总共就一个账号,读一次就到文件尾啦,feof检测就是true了,所以循环进不去。
把while条件改为账号不为空吧,并且下次fread前把结构中的账号恢复为空
你在循环外已经fread一次了啊,读完后文件指针已经到文件尾了啊,这时候while条件就不成立了,怎么进循环呢