2 u010050884 u010050884 于 2015.07.09 19:41 提问

在写一个简单的聊天项目的登录界面和帐号注册。现在写了点,运行的时候注册完用注册过的帐号登录不成功

在写一个简单的聊天项目的登录界面和帐号注册。现在写了点,运行的时候注册完用注册过的的帐号登录不上。写了个遍历函数,打印出来的是乱码的。请各位指点。
==============================================主函数main.c
#include"ui.h"
int main()
{
RegisteredNODE *Headnode;
Registered registeredinfo;
system("clear");
Headnode=malloc(sizeof(RegisteredNODE));
//Headnode.next=NULL;
//Read(Headnode);

while(1)
{

    int ret = Fristui();

    switch(ret)
    {
        case 1:
             Loginui();//登录
             break;
        case 2:
             Register();//注册
             break;
        case 3:

             coverlink();//遍历
             break;
        case 0:                 
             exit(0);
             break;
        default:
             printf("\033[33;32m您的输入有误,请您重新输入:\033[0m");
             break;
    }

}

}

(ui.c)
#include "ui.h"

int Fristui()
{
system("clear");
int ichoice;

printf("\t\t\t\033[33;32m1.登录\033[0m\n\n");
printf("\t\t\t\033[33;32m2.注册\033[0m\n\n");

// printf("\t\t\t\033[33;32m3.遍历\033[0m\n\n");
printf("\t\t\t\033[33;32m0.退出\033[0m\n\n");
printf("\t\t\t\033[33;32m请输入您的选择:\033[0m\n\n");
printf("\t\t\t");
scanf("%d",&ichoice);
return ichoice;
}

int Loginui(RegisteredNODE *Headnode,Registered registeredinfo)
{
//Read_Personaldata();//把所有的已注册的用户信息读取到链表中

//Read(Headnode);
system("clear");
printf("\t\t\033[33;32m*************欢迎注册HGC聊天帐号***********\033[0m\n\n");
int choice;
int i=3;
char NickName_Input[max]={'\0'};//定义要输入的昵称
char PassWord_Input[max]={'\0'};//定义要输入的密码
char Vercode_Input[max]={'\0'};//定义要输入的验证码
char str[5];//定义生成的验证码
do
{   system("clear");
    printf("\t\t\t\033[33;32m昵称:\033[0m");
    scanf("%s",NickName_Input);
    printf("\n");

    printf("\t\t\t\033[33;32m密码:\033[0m");
    scanf("%s",PassWord_Input);
    printf("\n");

    Verification_code(str);       //生成验证码
    printf("\n");
    printf("\t\t\t\033[33;32m请输入您的验证码:\033[0m");
    scanf("%s",Vercode_Input);
    printf("\n");



    if(strcmp(NickName_Input,registeredinfo.NickName_Rge) == 0 && strcmp(PassWord_Input,registeredinfo.PassWord_Rge) == 0 && strcmp(str,Vercode_Input) == 0)
        //当昵称、密码、验证码都验证通过时进入聊天功能界面
{
        printf("\t\t\t\033[33;32m验证通过!欢迎进入HGC聊天功能界面!\033[0m\n");
    sleep(1);
        return 1;
            //这里要调用聊天功能界面
    } 
    else 
    {
        i--;
        system("clear");
        if(strcmp(NickName_Input,registeredinfo.NickName_Rge) == 0 && strcmp(PassWord_Input,registeredinfo.PassWord_Rge) != 0 )
        //用户昵称正确,而密码错误。打印验证失败,提示密码错误,请重新登录。同时i-1
        {
        printf("\t\t\t\033[33;31m验证失败!\033[0m\n");

            printf("\t\t\t\033[33;32m用户密码错误,请您重新输入!\033[0m\n");
            printf("\t\t\t\033[33;34m您还有 %d次 机会重新输入!\033[0m\n",i);  
        sleep(1);



        } 

    else if(strcmp(NickName_Input,registeredinfo.NickName_Rge) != 0 && strcmp(PassWord_Input,registeredinfo.PassWord_Rge) == 0)
        //用户密码正确,而昵称错误。打印验证失败,提示昵称错误,请重新登录。同时i-1
        {
    printf("\t\t\t\033[33;31m验证失败!\033[0m\n");

            printf("\t\t\t\033[33;32m用户密码错误,请您重新输入!\033[0m\n");
            printf("\t\t\t\033[33;34m您还有 %d次 机会重新输入!\033[0m\n",i);  
        sleep(1);


        } 

        else if(strcmp(NickName_Input,registeredinfo.NickName_Rge) == 0 && strcmp(PassWord_Input,registeredinfo.PassWord_Rge) == 0 && strcmp(str,Vercode_Input) != 0) 
        //用户密码、昵称正确,而验证码错误。打印验证失败,提示验证码错误,请重新登录。
        {
            printf("\t\t\t\033[33;31m验证失败!\033[0m\n");

            printf("\t\t\t\033[33;32m验证码错误,请您重新输入!\033[0m\n");

    sleep(1);

        }
        //用户昵称和密码都错误,打印验证失败。提示可能您没有该系统的帐号,请注册。1是注册,2否,退出重新登录。  
        else if(strcmp(NickName_Input,registeredinfo.NickName_Rge) != 0 && strcmp(PassWord_Input,registeredinfo.PassWord_Rge) != 0)

        {
            int choice;
            printf("\t\t\t\033[33;31m验证失败,昵称和密码均输入错误!\033[0m\n\n");
            printf("\t\t\t\033[33;32m可能您没有该系统的帐号,您愿意注册一个吗?(0:不注册,1:注册\033[0m\n\t"); 
            scanf("%d",&choice);
            switch(choice)
            {
                case 0:
                     // Loginui();
                      exit(0);
                case 1:
                      Register();//调用注册函数 
                      break;
                default:
                      printf("\t\t\t\033[33;32m您的输入有误,请您重新输入:\033[0m");
                      printf("\t\t\t\033[33;32m请按任意键继续......\033[0m\n");
                      printf("\t");
                      while(getchar()!='\n');
                      getchar();
                      break;
           }
       }
   }   

}while(i>0);

Clock();

}

4个回答

u010050884
u010050884   2015.07.09 19:43

下面的是问题里代码的后续,请各位帮忙纠错。

RegisteredNODE Register()
{
RegisteredNODE *Headnode;
Registered registeredinfo;
system("clear");
printf("\t\t\033[33;32m
************欢迎注册HGC聊天帐号***********\033[0m\n\n");
printf("\t\t\t\033[33;32m 请您输入昵称:\033[0m");
scanf("%s",registeredinfo.NickName_Rge);
printf("\n\n");
printf("\t\t\t\033[33;32m 请您输入密码:\033[0m");
scanf("%s",registeredinfo.PassWord_Rge);
printf("\n\n");
printf("\t\t\t\033[33;32m 请您输入手机号码:\033[0m");
scanf("%s",registeredinfo.PhoneName_Rge);
printf("\n\n");
int ichoice;
printf("\t\t\033[33;32m亲,您确定真的要注册吗(温馨提示:一旦注册请不要随意抛弃我们哦!)?(0:不注册,1:注册)\033[0m\n\t");

scanf("%d",&ichoice);
switch(ichoice)
{
case 0:
exit(0);

      case 1: 
            Addnode();
            coverlink();
            break;

      default:
             printf("\033[33;32m 您的输入有误,请您重新输入:\033[0m");
             printf("\t\033[33;32m 请按任意键继续......\033[0m\n");
             printf("\t");

             getchar();
             break;
    }

}

RegisteredNODE *Addnode()
{
RegisteredNODE *Headnode;
Registered registeredinfo;
RegisteredNODE *p = &head;
RegisteredNODE *q = malloc(sizeof(RegisteredNODE));

int ichoice;
printf("\t\t\033[33;32m 亲,您真的需要注册吗(温馨提示:一旦注册成功请不要随意抛弃我们哦*-*)(0:不添加,1:添加)\033[0m\n\t");  
scanf("%d",&ichoice);
   switch(ichoice)
   {
      case 0:
            exit(0);

      case 1: 
             q->registeredinfo=registeredinfo;
             q->next=NULL;
             q->next=p->next;
             p->next=q;

             break;

      default:
             printf("\033[33;32m 您的输入有误,请您重新输入:\033[0m");
             printf("\t\033[33;32m 请按任意键继续......\033[0m\n");
             printf("\t");

             getchar();
             break;
      }


return 0;

}

int coverlink()
{
system("clear");
printf("\t\t\033[33;32m*************欢迎注册HGC聊天帐号***********\033[0m\n\n");
RegisteredNODE *p = head.next;
while(p != NULL)
{
printf("\t\t\t\033[33;32m 昵称 密码 电话号码\033[0m\n\n" );
printf("\t\t\t\033[33;32m %-13s %-20s %-15s\033[0m\n",p->registeredinfo.NickName_Rge,
p->registeredinfo.PassWord_Rge,
p->registeredinfo.PhoneName_Rge);

     printf("\n");
     p = p->next;
 }
 printf("\t\033[33;32m 请按任意键继续......\033[0m\n");
 printf("\t");

 getchar();
 sleep(1);
 return 0;

}

/*int Clientui()
{
int choice;
printf("\t\t\t\033[33;32m恭喜您登录HGC聊天系统成功!\033[0m\n");
printf("\t\t\t\033[33;32m1.单人聊天\033[0m\n");
printf("\t\t\t\033[33;32m2.查看聊天记录\033[0m\n");
printf("\t\t\t\033[33;32m3.添加好友\033[0m\n");
printf("\t\t\t\033[33;32m4.查看好友\033[0m\n");
scanf("%d",&choice);
return choice;
}
*/

(ui.h)
#define max 64
#include
#include
#include
//定义注册帐号结构体
typedef struct _Registered
{
char NickName_Rge[max];//定义要注册的昵称
char PassWord_Rge[max];//定义要注册的密码
char PhoneName_Rge[max];//定义要注册的手机号码

}Registered;

typedef struct _RegisteredNODE
{
struct _Registered registeredinfo;
struct _RegisteredNODE *next;
}RegisteredNODE;

RegisteredNODE head;

int Fristui();
int coverlink();
int Loginui();
void Clock();
int Clientui();
RegisteredNODE *Register();

RegisteredNODE *Addnode();

验证码(vercode.c)
#include "ui.h"

//传值
char Verification_code( char str[5]) //char str[5]; 获取五位的随机串
{
srand((int)time(NULL));//获得随机种子.(随时间生成不同的种子)
int n;//用来随机判断随机串的某一位是数字还是字母
int n1;//用来进一步判断究竟是生成大写字母还是小写字母.
char c;//用来获取随机字符
int num=0;
int i;
for(i=0;i<5;i++)
{
n=(rand()%10+1);
//人工设定字符串是字母或者数字的比例为7:3
if(n<=3)
{
c=(rand()%10+'0');
str[i]=c;
}

        else
        {
            //进一步判断生成的随机字符是大写还是小写,比例为1:1
            n1=rand()%2+1;
            if(n1==1)
            {
                c=(rand()%26+'a');
                str[i]=c;
            }

            else
            {
                c=(rand()%26+'A');
                str[i]=c;
            }
        }
    }

printf("\t\t\t\033[33;34m验证码是:\033[0m");     //一组验证码

for(i=0;i<5;i++)
{
    printf("%c",str[i]);
}
printf("\n");
num++;

}

//时间计时器,三次输错后计时
void Clock()
{
int hour = 0;
int min = 10;
int sec = 0;

while(1)
{
    //1.走秒
    sleep(1);
    --sec;
    if(sec <0)
    {
        sec = 59;
        --min;
    }

    if(min <0)
    {
        min = 59;
        --hour;
    }

    if(hour<0)
    break;


    //2.显示时间  23:03:05
    system("clear");
    printf("\n\n\t你再重新输入的时间还有:\n");
    printf("\n");
    printf("\t\t%02d:%02d:%02d\n",hour,min,sec); 

}

}

devmiao
devmiao   Ds   Rxr 2015.07.09 21:04

代码太多了,建议你下断点调试,先缩小范围再提问。

u010050884
u010050884 知道问题出在注册帐号的代码段(Addnode();),代码都发出来是想让看问题的人能调试
2 年多之前 回复
tongyi55555
tongyi55555   2015.07.10 07:09

好长的代码。你把注册信息存放到哪里了,看下存放的对不对,存放的正确的话就是读取的不对了,先确定哪里错了吧。

u010050884
u010050884 知道问题出在注册帐号的代码段(Addnode();),但是不知道怎么改。而且应该是注册帐号错了,代码都发出来是想让看问题的人能调试
2 年多之前 回复
yuke198907
yuke198907   2015.07.10 08:20

没有做好编码处理吧,把所有的编码统一

u010050884
u010050884 这方面应该是没有问题
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片