CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

纳闷

楼主lupenda()2003-12-02 22:45:07 在 C/C++ / C++ 语言 提问

#include   <iostream>  
  #include   <string>  
  #include<conio.h>  
  using   namespace   std;  
   
  class   Log  
  {  
  public:  
  Log(const   char   *password);  
  bool   compname();  
  private:  
  string   name;  
  string   passwd;  
  char   ch;  
  };  
   
  Log::Log(const   char   *password):name("123"),passwd("12")  
  {  
  compname();  
  }  
   
  bool   Log::compname()  
  {  
  string   logname;  
  string   password;  
   
  cout   <<   "enter   logname:";  
  cin   >>   logname;  
  cout   <<   "enter   password:";  
  while   ((ch=getch())!=13)  
  {  
                            password   +=   ch;  
                            cout   <<   "*";  
  }  
  cout   <<   endl;  
  for   (static   int   m=1;m<4;m++)  
  {  
  if   (name   ==   logname   &&   passwd   ==   password)  
  {  
  cout   <<   "login   succeed."<<   endl;  
  return   true;  
  }  
  else  
  {  
  if   (m   ==   3)     //错误次数达到三次强行退出  
  return   false;  
  cout   <<   "wrong   logname   or   password!   again:"   <<endl;      
  cout   <<   "enter   logname:"   ;  
                    cin   >>   logname;  
                                  cout   <<   "enter   password:";  
                                      while((ch=getch())!=13)             /*为什么这几行  
  {                                       *  
                                                            password   +=   ch;         *换成cin>>   password;  
                                                            cout   <<   "*";                 *  
  }                                         *就能正确呢?但第二次开始 cout   <<   endl;                   *不能显  
                                                                                                      *示为“****“形式   */  
  }  
  }  
  return   1;//随便返回个什么值,永远都不会执行到这里,但如果不返回值,编译器会提出警告!  
  }  
   
  void   main()  
  {  
  Log   login("   ");  
  }  
  问题点数:20、回复次数:14Top

1 楼zhouqingyuan(浪帆)回复于 2003-12-02 23:01:58 得分 0

纳闷?这有什么纳闷的呢,编译器才不管你能不能执行到哪里,它根本不考虑逻辑的东西,  
  只看你这个函数是否符合规格,你的函数声明了要返回一个bool值,当然要返回一个值了。  
  没有说你错误只是因为缺省返回一个整型值。也能说的过去,所以就有了一个警告。Top

2 楼lupenda()回复于 2003-12-03 15:42:27 得分 0

没有警告啊,只是如果第一次输入错误了那以后就算是输入正确了也没能登陆成功Top

3 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2003-12-03 15:55:48 得分 0

楼主是说调试的时候执行不到是吧?  
   
  编译器进行优化的时候忽略掉了,其实在汇编码里是有这句的,你不必担心  
   
  return   其实就是把值或址放到eax寄存器里……Top

4 楼abitz(阿奈)(老婆永远是对的!)回复于 2003-12-03 16:02:24 得分 0

password没清空Top

5 楼abitz(阿奈)(老婆永远是对的!)回复于 2003-12-03 16:05:59 得分 20

#include   <iostream>  
  #include   <string>  
  #include<conio.h>  
  using   namespace   std;  
   
  class   Log  
  {  
  public:  
  Log(const   char   *password);  
  bool   compname();  
  private:  
  string   name;  
  string   passwd;  
  char   ch;  
  };  
   
  Log::Log(const   char   *password):name("123"),passwd("12")  
  {  
  compname();  
  }  
   
  bool   Log::compname()  
  {  
  string   logname;  
  string   password;  
   
  cout   <<   "enter   logname:";  
  cin   >>   logname;  
  cout   <<   "enter   password:";  
  while   ((ch=getch())!=13)  
  {  
                            password   +=   ch;  
                            cout   <<   "*";  
  }  
  cout   <<   endl;  
  for   (static   int   m=1;m<4;m++)  
  {  
  if   (name   ==   logname   &&   passwd   ==   password)  
  {  
  cout   <<   "login   succeed."<<   endl;  
  return   true;  
  }  
  else  
  {  
  if   (m   ==   3)     //错误次数达到三次强行退出  
  return   false;  
  password.clear();   //   这里清空一下即可  
  cout   <<   "wrong   logname   or   password!   again:"   <<endl;      
  cout   <<   "enter   logname:"   ;  
                    cin   >>   logname;  
                                  cout   <<   "enter   password:";  
                                      while((ch=getch())!=13)              
  {                                      
                                                            password   +=   ch;          
                                                            cout   <<   "*";          
  }                                          
  }  
  }  
  return   1;//随便返回个什么值,永远都不会执行到这里,但如果不返回值,编译器会提出警告!  
  }  
   
  void   main()  
  {  
  Log   login("   ");  
  }  
  Top

6 楼lupenda()回复于 2003-12-03 19:29:41 得分 0

to     abitz(阿奈)   :  
  password.clear();那个clear()是string   自带的吗?调试不通啊!  
  Top

7 楼lupenda()回复于 2003-12-03 19:33:07 得分 0

to     abitz(阿奈)   :  
  你说的没错,没有清空!我试了  
  但password.clear();还没正确,加上后结果:  
  error   C2039:   'clear'   :   is   not   a   member   of   'basic_string<char,struct   std::char_traits<char>,class   std::allocator<char>   >'Top

8 楼lupenda()回复于 2003-12-03 21:05:02 得分 0

上面的问题已解决,用erase()!  
   
  但有产生新的疑问:我要是想修改密码,那是不是就不能用上面的方法初始化用户名和密码啊?想用两个变量来存储用户名和密码,该怎么进行初始化?Top

9 楼yhmar007(马仔)回复于 2003-12-05 15:38:40 得分 0

上面问题的初始化我想用打开文件的方式,就是把name和passwd存放在a.txt和b.txt里  
  我这么做:  
   
  Log::Log(const   char   *password):name(ifstream   ifile("a.txt")),passwd("b.txt")  
   
  但是行不通,我该怎么做?Top

10 楼abitz(阿奈)(老婆永远是对的!)回复于 2003-12-09 17:28:55 得分 0

1。clear好像是basic_string的标准接口,  
  不知道你用的是那个版本的STL?  
   
  2。我以前做的电子邮件系统是这样解决这个问题的:  
  把用户及其密码按照一定的格式储存在文件里,然后初始化时读出它们.  
  但是Log::Log(const   char   *password):name(ifstream   ifile("a.txt")),passwd("b.txt")  
  这个肯定行不通。可以在ctor中打开文件,并读出数据。  
   
  Top

11 楼lupenda()回复于 2003-12-09 21:12:55 得分 0

上面的问题已经得到解决,但我只是简单的存放在文本文件里,这种做法显然很不安全,不知有什么好的方法没有?  
  如果用异或倒是可以进行简单的加密,但还是很不安全的,可以随便删除或更改,存进数据库里当然是最好不过了,但我暂时对数据库还不是很了解。  
  有没有办法对同一个文件用异或进行加密呢?我的意思是不要用到第二个文件Top

12 楼yinhu005(我是一只小鸟,却怎么也飞不高)回复于 2003-12-09 21:54:09 得分 0

return   1;//随便返回个什么值,永远都不会执行到这里,但如果不返回值,编译器会提出警告!  
   
  知道为什么吗?  
  if   (name   ==   logname   &&   passwd   ==   password)  
  {  
  cout   <<   "login   succeed."<<   endl;  
  return   true;    
  }  
  else  
  {  
  if   (m   ==   3)     //错误次数达到三次强行退出  
  return   false;  
   
  上面的两个“return”语句就跳到“return   1;”后面的那个大括号处,所以只要执行了if语句中的任意一个“return”,都会跳过“return   1;”语句。Top

13 楼lupenda()回复于 2003-12-10 12:28:30 得分 0

yinhu005(学员)  
  你理解错了,我问的不是这问题,这是我自己的注释Top

14 楼abitz(阿奈)(老婆永远是对的!)回复于 2003-12-10 23:06:03 得分 0

你可以对一个文件加密,不一定用那个异或的方法吧?  
  随便找个加密算法,将内容加密后存储;  
  读出时再解密。  
  我对加密算法懂得不多,但应该随处都可以下到。Top

相关问题

  • 纳闷
  • 纳闷!!:(
  • 纳闷!!!关于dbgrid!!!
  • 纳闷的问题?
  • 一个 "疑问" , 纳闷 !
  • 我又纳闷了,求助
  • Gnome之Panel消失问题,纳闷
  • 关于DADAGRID的问题…… *纳闷*
  • 砸100分 问个 纳闷的问题
  • sql修改语句纳闷中。。。

关键词

  • 文件
  • 密码
  • 解决
  • 用户
  • compname
  • logname
  • 初始化
  • passwd
  • cout
  • password

得分解答快速导航

  • 帖主:lupenda
  • abitz

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo