You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:09:01