关于数组和if循环函数的一个小疑点

关于数组和if循环函数的一个小问题
void xuanze()
{
int i;
char temp1[N],temp2[N],temp3[N],yhmtmp[N];
    char s1[N],s2[N];

printf("-----------\n1.注册\n2.登陆\n0.退出\n");
scanf("%d",&i);
    system("cls");
if(i==1)
    {
        printf("输入用户名\n");
        fflush(stdin);//清空缓存
        gets(yhmtmp);
        printf("输入密码\n");
        fflush(stdin);
        gets(temp1);
        printf("输入密码确认\n");
        fflush(stdin);
        gets(temp2);
        if(!strcmp(temp1,temp2))
           {
               system("cls");
           printf("注册成功\n");
           xuanze();
           }

           else
           {
               printf("两次输入不一致,输入密码确认\n");
              gets(temp3);
               if(!strcmp(temp1,temp3))
            {  system("cls");
             printf("注册成功\n");

             }
            xuanze();

           }
    }
else if(i==2)
{
    printf("输入用户名\n");
    fflush(stdin);
gets(s1);
    printf("输入密码\n");
    fflush(stdin);
    gets(s2);
    if(!strcmp(s1,yhmtmp))
         if(!strcmp(s2,temp1))
            printf("登陆成功\n");
         else
          {system("cls");printf("密码错误\n");xuanze();}
    else
          {printf("用户名不存在\n");xuanze();
    }
}
else if(i==0)
     {
        Quit();
        }

}
这个小程序的登录系统在判断用户名和密码的时候产生了错误,不管怎么输入都会是永假。感觉要么是之前注册的用户名和密码根本没有存到数组里,那个比较没意义,要么就是判断的方式有问题。请大家看看~~(可能会有一些括号什么的问题,应该是修改后忘了加什么的。是能运行的。。就是没效果
------解决方案--------------------
要善于调试。
------解决方案--------------------
不是你说的    ”感觉要么是之前注册的用户名和密码根本没有存到数组里,那个比较没意义,要么就是判断的方式有问题。“ 
    这种问题,而是你一些基础知识没有打扎实:
  原因就在 你没有注意那些 char 变量的作用范围是哪里,char在xuanze()这个函数内部定义的,也就是说他的变量的作用域是函数内部,详细解释一下:
   在你选择了1后,写入用户名和密码后,它就将这些信息全部存入char这些数组变量中,然后会怎样,你又调用了xuanze()这个函数,相当于你在函数内部递归了xuanze()函数,同样它会在这个嵌套的xuanze()内部在定义一次char 数组这些变量,和外面那个xuanze()函数定义的是同名char变量,这些都是局部变量,但是外层的char 数组已经在注册过程中已经赋值,但是嵌套的xuanze()函数内部重新定义的char 数组变量中用户名和密码根本就没赋值,相当于在嵌套xuanze()内部你只完成了登录过程,完成的是s1,s2登录过程中的赋值,然后他会将这些信息和在嵌套的xuanze()函数内部定义的yhmtmp和tmp1作比较,但是嵌套xuanze()函数的yhmtmp个tmp1根本没有赋值,肯定会用户名和密码不匹配的情况:
解决方法:
把那些局部变量char数组和 int全部定义为全局变量,放在函数外部定义,就能通过了,我试过了,能得到你要的结果。