标签:file ror exit lib 信息 ima struct fopen 选择
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct sj //构造账号,密码
{
char zh[20];
char mm[20];
};
typedef struct sj sj ;
sj k;
void menu () // 开始菜单
{
printf("-----0. 退出-----\n");
printf("-----1. 登录-----\n");
printf("-----2. 注册-----\n");
}
int denglu () // 登录
{
FILE *p;
int i =0;
int j =0;
int d;
int q=0;
char hh;
char zh[20];
char mm[20];
p=fopen ("D:\\shuju.txt","r"); //打开文件
while ((zh[i] = fgetc (p)) != EOF ) //验证账号
{
if (zh[i]==k.zh[i])
{
i++;
}
else if( zh[i] == ‘ ‘ &&zh[i] != ‘\n‘) //验证账号完毕,准备验证密码。
{
while ((mm[j] = fgetc (p)) != EOF)
{
if (mm[j] == k.mm [j])
{
j++;
continue;
}
else if (mm[j] ==‘ ‘&&mm[i] != ‘\n‘) // 验证密码成功
{
printf("登录成功!!");
return 0;
}
else //验证密码失败
{ printf ("%c",mm[i]);
fseek(p,-1,1);
goto lose;
}
}
}
else // 验证下一条账号
{
i=0;
while ( (hh=fgetc(p))!=EOF && q<2)
{
if (hh==‘ ‘ && hh !=‘\n‘)
{
q++;
}
}
q=0;
}
}
fclose(p);
lose: printf ("账号或密码错误,请选择:\n 1. 重新输入 \n 2. 注册 \n 0. 退出系统 \n"); // 验证失败
scanf ("%d", &d);
switch (d)
{
case 1:
return 1 ;
break ;
case 2:
return 2;
break ;
case 0:
exit (1);
break ;
}
return 0;
}
int zhuce ( )
{
FILE *p;
sj k;
printf("请输入账号密码(*请不要输入空格*)\n账号:"); // 输入注册信息
scanf("%s",k.zh );
printf("密码:");
scanf("%s",k.mm );
p = fopen ("d:\\shuju.txt","a"); //打开文件
if (p==0) // 验证文件打开是否成功
{
printf("source text file error \n");
exit (1);
}
fputs(k.zh,p); // 写入文件
fputc(‘ ‘,p);
fputs(k.mm,p);
fputc(‘ ‘,p);
fputc(‘\n‘,p);
fclose (p); // 关闭文件
printf ("注册成功!!");
return 0 ;
}
int main ()
{
menu (); // 显示菜单
int c;
int a;
scanf ("%d",&c);
switch (c) //选择
{
case 1 :
begin:printf("请输入账号密码\n账号:"); //登录
scanf("%s",k.zh );
printf("密码:");
scanf("%s",k.mm );
a = denglu ();
if (a == 1 ) // 密码错误
{
goto begin ;
}
else if (a == 2) //注册
{
zhuce ();
printf("请登录\n");
goto begin ;
}
break;
case 2 :
zhuce (); // 注册
printf("请登录\n");
goto begin ;
break;
case 0 :exit(1); // 退出系统
break;
}
return 0;
}
实际运行后发现,注册功能能够正常使用,没有问题。 但分不清账号密码都时 同样字符的,如账号:2222222,密码:2222222
登陆时输入账号错误偶尔会出现乱码。
但登录时密码输错后必会出现乱码。
不知该如何解决。(怀疑是 goto 的问题)
标签:file ror exit lib 信息 ima struct fopen 选择
原文地址:https://www.cnblogs.com/btimepes/p/11627584.html