请求高人一个C++程序问题!

不剪发的Tony老师
数据库领域优质创作者
博客专家认证
2007-03-05 06:45:16
小弟初学C+ +有一程序如下:
#include <iostream.h>
#include <string.h>
class User
{
private:
char UserName[20];
char Pass[6];
public:
User (char u[], char p[]){strcpy(UserName,u); strcpy(Pass,p);}
char *GetUserName(){return UserName;}
char *GetPass(){return Pass;}
};
void welcome ()
{
cout<<"\n欢迎进入系统!"<<endl;
}

void main()
{
User user[]={ User("AABBBB","123456"),User("BBCCCC","234561"),
User("CCDDDD","345612"), User("DDEEEE","456123"),User("EEFFFF","561234")};
char name[20],pass[6];
while (1)
{
cout<<"姓名输入为Q时退出\n\n";
cout<<"请输入姓名: ";
cin>>name;
cout<<"请输入口令: ";
cin>>pass;
if (strcmp(name,"Q")==0)
break;
for(int i=0;i<5;i++)
if ((strcmp(name,user[i].GetUserName())==0)&&(strcmp(pass,user[i].GetPass())==0))
{
welcome();break;
}
if(i==5)
cout<<"用户名不存在或口令错!"<<endl;
}
cout<<"\n欢迎下次再见!"<<endl;
}
当输入正确用户和口令时仍显示:用户名不存在或口令错!
其它情况正确,调试发现pass变成123456BBCCCC,比自己设置的多6位,而且是下一个用户名,一直想不明白,请教高人帮忙!!!
...全文
478 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
对了,怎么给分啊?
  • 打赏
  • 举报
回复
嗯,不错,我试试。
  • 打赏
  • 举报
回复
太谢谢了!这里果然高手如云啊!
以后一定常来看看!嘿!
pengzhixi 2007-03-06
  • 打赏
  • 举报
回复
如果用c样式的字符串要留一个位置来存储结束符‘\0'
Dugowe 2007-03-06
  • 打赏
  • 举报
回复
呵呵,
szwx855 2007-03-06
  • 打赏
  • 举报
回复
#include <iostream.h>
#include <string.h>
class User
{
private:
char UserName[20];
char Pass[7];
public:
User (char u[], char p[]){strcpy(UserName,u); strcpy(Pass,p);}
char *GetUserName(){return UserName;}
char *GetPass(){return Pass;}
};
void welcome ()
{
cout<<"\n欢迎进入系统!"<<endl;
}

void main()
{
User user[5]={ User("AABBBB","123456"),User("BBCCCC","234561"),
User("CCDDDD","345612"), User("dabao","111111"),User("EEFFFF","561234")};
char name[20],pass[7];
while (1)
{
cout<<"姓名输入为Q时退出\n\n";
cout<<"请输入姓名: ";
cin>>name;
if (strcmp(name,"Q")==0) break;
cout<<"请输入口令: ";
cin>>pass;

for(int i=0;i<5;i++)
if ((strcmp(name,user[i].GetUserName())==0)&&(strcmp(pass,user[i].GetPass())==0))
{
welcome();break;
}
if(i==5)
cout<<"用户名不存在或口令错!"<<endl;
}
cout<<"\n欢迎下次再见!"<<endl;
}


我想建议下,程序运行后,就算输入了"Q",但是还是要输入密码才可以退出,你可以把判断姓名为q的语句放在输入姓名的后面,这样就好些了.呵呵.只是给点建议~~
程序还是不错的,看的知道了不少.
wuyu1 2007-03-06
  • 打赏
  • 举报
回复
学习一下 虽然我看不懂里面的函数名(小弟刚接触的)但这函数的编程思想还是看出来了 就是自己先定义用户名和密码 看输入的对不对 不对的就Break 对嘛? 谢谢各位大哥大姐
麦田之兔 2007-03-06
  • 打赏
  • 举报
回复
来学习学习
jixingzhong 2007-03-05
  • 打赏
  • 举报
回复
pass[6];
==》
pass[7];

字符串的末尾还有一个 '\0' 字符需要保存
snprintf 2007-03-05
  • 打赏
  • 举报
回复
千万不要忘了,用数组存储字符串的时候要多留出一个位置用来存储字符串结束标志('\0').
snprintf 2007-03-05
  • 打赏
  • 举报
回复
你看看你储存密码的数组够用吗? 把所有的 pass[6] 改成 pass[7] 就可以了,否则的话不够用.

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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