怎么实现不了比较的功能啊?

kinglang 2002-05-05 08:29:17

void __fastcall TFORM1::Button1Click(TObject *Sender)
{
TStringList * TempString=new TStringList;
AnsiString temp=ExtractFilePath(Application->ExeName)+"check.ppp";
TempString->LoadFromFile(temp.c_str());
AnsiString pwd=TempString->GetText();
pwd.Trim();
//以上是实现从文本文件中读取一段数据到pwd中

char * temppwd=pwd.c_str();
ShowMessage(pwd);
for(int i=0;i<pwd.Length();i++)
{
temppwd[i]+=i;
}
ShowMessage(pwd);
ShowMessage(Password->Text.c_str());//这里显示信息与上一显示信息是相等的
if(CompareStr(pwd,Password->Text)==0)//为什么这一步之后老是执行else之后的语句
ShowMessage("您输入的密码对!");
else
{
ShowMessage("对不起,您输入的密码不对!");
}
}
//---------------------------------------------------------------------------
...全文
45 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kinglang 2002-05-09
  • 打赏
  • 举报
回复
i think u r right.let me have a try and answer u later.
jishiping 2002-05-08
  • 打赏
  • 举报
回复
不要用CompareStr比较,直接用C函数strcmp进行比较。
“在中间加的显示语句显示结果是一样的”,不能保证两个字符串就一定是
一样的。即使两个字符串不一样,有些控制字符在ShowMessage()时不能显示,这样你看到的两个字符串就可能一样。
kinglang 2002-05-08
  • 打赏
  • 举报
回复
其实我在运行程序的时候也考虑了这个问题,所以在高度的时候我选的测试数据都是没有超出范围的,比如从文本文件中读取出来两个比较小的数字组合起来的数,如123,以我的解密方式解密后是135,我在密码框里输入的也是135,这样就避免了你所说的情况的出现,但问题是在这种情况下还是有我提出的问题出现,所以我真的不明白到底问题出在哪里,明明在中间加的显示语句显示结果是一样的,但就是比较时不能正确反应出来。
CCLIS 2002-05-08
  • 打赏
  • 举报
回复
因为C++的限制,CHAR的值最大只能是127,即便是UNSIGNED CHAR最大也只能是255,经过你这样一处理,肯定会有中间的字符变成0,呵呵,再改一下吧。
CCLIS 2002-05-08
  • 打赏
  • 举报
回复
错误出在PWD。TRIM(),你这样一来,原来密码的长度就可能发生变化,因为你是对字符进行加密的,有一些字符可能变为0或是非打印字符,经TRIM一处理,全变了,再进行解密,怎能不出错。

还有,你保存密码的文件是文本型,这种文件也会把控制字符吃掉,要保存经过加密单个字符而得到的字符串,最好用二进制型文件保存,在读取时也不能根据STRLEN来判断字符串的长度,一定要在保存的同时保存字符串的长度,然后根据长度数据来进行解密,这样可以避免字符0所造成的错误。
kinglang 2002-05-08
  • 打赏
  • 举报
回复
你基本上没有改我的代码啊
只是把含有简单加密功能的那块去掉了。
我试过了,没用,我想是不是因为存储格式的不同有影响啊。比如尾符"\0"?
shadowstar 2002-05-05
  • 打赏
  • 举报
回复
//这里修改过的代码,你试一下行否
void __fastcall TFORM1::Button1Click(TObject *Sender)
{
TStringList * TempString = new TStringList;
AnsiString temp = ExtractFilePath(Application->ExeName)+"check.ppp";
TempString->LoadFromFile(temp);
AnsiString pwd = TempString.Strings[0];
pwd.Trim();
//以上是实现从文本文件中读取一段数据到pwd中

ShowMessage(pwd);
ShowMessage(Password->Text);//这里显示信息与上一显示信息是相等的

if(CompareStr(pwd, Password->Text) == 0)
ShowMessage("您输入的密码对!");
else
ShowMessage("对不起,您输入的密码不对!");

delete TempString;
}
shadowstar 2002-05-05
  • 打赏
  • 举报
回复
你的代码太乱了
ken_henderson 2002-05-05
  • 打赏
  • 举报
回复
改为CompareStr(Trim(pwd),Trim(Password->Text)
kinglang 2002-05-05
  • 打赏
  • 举报
回复
没有人回答我的这个问题吗?
kinglang 2002-05-05
  • 打赏
  • 举报
回复
up

13,870

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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