Pascal验证码校验if条件无论实际值始终为真问题排查求助
故障根因
你的代码里对两个布尔判断变量做了无效的强制覆盖赋值:
- 你先通过
sAnswer = sCode的对比逻辑拿到了验证码是否匹配的正确结果,赋值给了bRightAnswer,但紧随其后的bRightAnswer := True直接把这个结果覆盖成了固定真值,不管验证码是否输入正确,这个变量永远为真 - 同理
bWrongAnswer先拿到了验证码不匹配的判断结果,立刻被bWrongAnswer := False覆盖为固定假值,完全没有起到判断作用
修复代码
你只需要删掉两行强制赋值的冗余代码即可,甚至可以直接省去无用的bWrongAnswer变量,优化后的代码如下:
procedure TfrmCAPTCHA.btnCheckClick(Sender: TObject); var sCode, sAnswer : string; bRightAnswer : boolean; begin {button to verify input} sAnswer := Trim(edtAnswer.Text); sCode := edtCaptchaCode.Text; bRightAnswer := (sAnswer = sCode); 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;
额外提示:你的原代码里变量名
sANswer定义和赋值时大小写不一致,虽然Pascal不区分变量大小写,但建议统一命名规范避免后续维护出错。
内容的提问来源于stack exchange,提问作者Maryam Abrahams
相关产品推荐
相关产品推荐

