纳闷
#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




