if-statement - 无论实际值如何,条件始终评估为真
问题描述
我创建了一条if
语句,当输入的代码与生成的代码匹配时,我想使用 `ShowMessage() 函数输出一条消息。但是,它仍然输出“干得好!” 即使是公然错误的消息。
按钮代码:
procedure TfrmCAPTCHA.btnCheckClick(Sender: TObject);
var
sCode, sAnswer : string;
bRightAnswer, bWrongAnswer : boolean;
begin
{button to verify input}
sANswer := Trim(edtAnswer.Text);
sCode := edtCaptchaCode.Text;
bRightAnswer := (sAnswer = sCode);
bRightAnswer := True;
bWrongAnswer := (sAnswer <> sCode);
bWrongAnswer := False;
if bRightAnswer then
begin
btnCAPTCHAContinue.Show;
Showmessage('Nicely Done, seems you''''re all set to go!' + #13 +
'Press the continue button to collect your codes young wizzling');
end
else begin
edtCAPTCHACode.clear;
edtAnswer.clear;
btnCAPTCHAContinue.Hide;
Showmessage( 'That seems to be the wrong answer, please try again');
end;
end;
解决方案
那是因为您首先设置bRightAnswer
为true
/false
取决于它是否正确,但随后true
无论条件如何,您都会立即用固定再次覆盖它。下一个块设置中的相同内容bWrongAnswer
为false
:
bRightAnswer := (sAnswer = sCode);
bRightAnswer := True; {regardless of what it was before, it's always true now}
bWrongAnswer := (sAnswer <> sCode);
bWrongAnswer := False; {regardless of what it was before, it's always false now}
删除这两行。
您可以通过替换为 来进一步简化代码bWrongAnswer := (sAnswer <> sCode);
,bWrongAnswer := not bRightAnswer;
或者更进一步并bWrongAnswer
完全删除变量,而只not bRightAnswer
在代码中的任何位置使用。
其实现在看来,bWrongAnswer
反正你也用不上,拆掉应该没什么坏处。
如果您愿意,您也可以直接删除bRightAnswer
并替换为.if bRightAnswer then
if sAnswer = sCode then
推荐阅读
- linux - Tomcat 重启时启动:init.d 脚本不成功
- mysql - Spring Boot JPA 一对一映射生成 StackOverflow 错误
- java - 如何通过 RestAPI 使用 commitId 从 Bitbucket 下载文件?
- android - 向生成的会话发送响应
- eclipse - 为什么当 Maven 构建工作良好但将 Spark Jar 添加为外部 Jars 时会出现编译错误“对象 Apache 不是包 org 的成员”
- vuetify.js - 在这种情况下,如何让 v-flex 正确使用填充高度?
- python - 由于可能未关闭的内核导致的内存泄漏
- php - 如何获得每个帖子的 php 总评论数?
- google-apps-script - 使用 Dialogflow 访问 Google 表格中的数据以实现
- java - 我可以缓存 java.security.PrivateKey 对象,这样我就不必通过从私钥文件中读取来创建 PrivateKey 以获得更好的性能