码迷,mamicode.com
首页 > 其他好文 > 详细

这是段有乱码的代码

时间:2019-10-06 16:35:19      阅读:85      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!