这个错误是什么错误啊,跟着16题代码敲的,检查了好几遍,代码应该一模一样没问题的。但是就是报错。
估计程序上一遍运行后进程还没退出,因此再次编译时,无法覆盖正在运行的exe文件,提示拒绝访问
你先看看exe文件有没有关掉,关掉还这样的话就把Dev-C++关掉,重新打开,就ok了
【相关推荐】
void Login()
{
Users a, b;//同理,a是用来给用户输入的,b是用来是水的(从文件中读取到b中,用b和a匹配比较)
FILE* pf = fopen("users.dat", "rb");//以只读的方式打开文件
if (!pf)//如果读取失败
{
printf("%s\n", strerror(errno));//上面有讲过~
return;
}
printf("欢迎来到登录界面!\n");
Sleep(1000);
fread(&b, sizeof(Users), 1, pf);//先从文件中读取一个用户试试水
printf("请输入账号>>");
scanf("%s", a.id);
while (1)
{
if (!strcmp(a.id, b.id))//在文件中找到了与用户输入相同的id
{
break;
}
else
{
if (!feof(pf))//没读到文件末尾,继续读取文件中的id到b中
{
fread(&b, sizeof(Users), 1, pf);//继续从文件中读取用户信息进b,直到在文件中找到一个和a的信息相同的
}
else//读到文件末尾了,没有找到与用户输入相同的账号
{
printf("此账号不存在!请重新输入!\n");
Sleep(500);
fclose(pf);
pf = NULL;
return;
}
}
}
do
{
printf("请输入密码>>");
Getpwd(a.pwd);//获取密码,在下面会讲
if (!strcmp(a.pwd, b.pwd))//输入的密码与文件中的相同
{
printf("\n登录成功!欢迎使用!\n");
Sleep(500);
fclose(pf);//用完当然要把文件关啦
pf = NULL;//置空,避免野指针
return;
}
else
{
printf("\n密码输入错误,请重新输入\n");
}
} while (strcmp(a.pwd, b.pwd));
}
大概思路就是用户先输入账号(id),接着b从文件中读取用户,直到找到与用户输入id相同的,然后就是输入密码判断密码对不对咯。 里面用到了一个库函数strcmp,判断字符串是不是一样的,如果一样则返回0,不一样则返回一个非0值。