关于数组和if循环函数的一个小问题

zyt30748865 2014-06-07 09:19:09
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();
}

}
这个小程序的登录系统在判断用户名和密码的时候产生了错误,不管怎么输入都会是永假。感觉要么是之前注册的用户名和密码根本没有存到数组里,那个比较没意义,要么就是判断的方式有问题。请大家看看~~(可能会有一些括号什么的问题,应该是修改后忘了加什么的。是能运行的。。就是没效果
...全文
197 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyt30748865 2014-06-07
  • 打赏
  • 举报
回复
谢谢你的帮助,很全面的解释了它,这个问题我也想到了,但是如果只是单个的这个程序,改成全局变量是简单的。如果说是在一个更大的程序,比如一个已经成型的管理系统里面,那么这个全局变量的定义是不是应该放在主函数的下面,这个函数的外面?
linux_hsylar 2014-06-07
  • 打赏
  • 举报
回复
不是你说的 ”感觉要么是之前注册的用户名和密码根本没有存到数组里,那个比较没意义,要么就是判断的方式有问题。“ 这种问题,而是你一些基础知识没有打扎实: 原因就在 你没有注意那些 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全部定义为全局变量,放在函数外部定义,就能通过了,我试过了,能得到你要的结果。
帅得不敢出门 2014-06-07
  • 打赏
  • 举报
回复
要善于调试。
linux_hsylar 2014-06-07
  • 打赏
  • 举报
回复
一般这样的变量可以现在xxxx.h头文件用extern char xxx[n] 先声明在头文件,然后需要在xxx.cpp中使用时,直接定义使用;

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧