delphi - 重复循环内的 Pascal for 循环

标签 delphi console pascal

到目前为止,你们都非常乐于助人,所以这里又出现了一个烦人的问题!

我有一个基本的猜词游戏,用 Pascal 为 Delphi 7 中的控制台编写,其中猜测(正确或错误)存储在名为“guesses”的固定数组中,现在我需要做的是测试看看他们是否已经猜到了那封信。我有以下代码...

Write ('Guess a letter: ');
Readln (guess);
Guess := UpCase(Guess);
repeat
  for i := 1 to 20 do
  begin
    if guess = guesses[i] then
      begin
        guessed := true;
      end
    else begin
      guessed := false;
    end;
  end;
until (guessed = true) or (i = 20) ;

我的问题是它遵循 for 循环 20 次,并且应该结束,因为它是第一个字母并且不在“guesses”数组中,但不断重复。在循环 for 循环 20 次并且没有发现猜测字母的条目后,它应该以 bool 值“猜测”为 false 退出。

预先感谢您的帮助!

最佳答案

您编写的代码毫无意义。

  1. 要在找到猜测值时退出 for 循环,请在猜测值 := true 下方添加 break

  2. 为什么要使用一个永远为真的条件和一个很可能永远不会为真的条件来无限地重复相同的逻辑?我猜您已经在重复循环中显示了部分代码,而不是全部。在这种情况下,代码示例的 stackoverflow 上的一个很好的约定是在您确实不想在此处显示的 100 行以上的地方放入类似以下内容的内容:do_something_here();。/p>

  3. 如果您显示 var 声明,以便我们可以看到您的类型,那就太好了。

如果满足以下条件,您的代码将再次有意义:

  1. 您从 for 循环中中断。
  2. 如果您在每种情况下执行不同的操作,例如要求用户输入一些新的内容,则只需执行 While 循环。

这里有一些代码至少可以做一些有用的事情:

(1) 它会要求您输入一些内容,然后重复输入,直到您输入的内容与硬编码列表中的元素相匹配。

(2) 给定您的某些输入,它将终止,这与您的代码可能永远不会终止不同。一旦找到匹配项,它也不会在其他元素的 for 循环中浪费时间。

(3) 它简单地表明您应该验证输入,否则将会出现异常。如果您什么都不输入,只在代码中按回车键怎么办?你会得到一个无限循环。

procedure Demo;
var
  guess:Char;
  guesses:Array of Char;
  i: Integer;
  guessed:Boolean;
begin
 repeat
  setup_guesses(guesses); // not shown
  Write ('Guess a letter: ');
  Readln (guess);
  Guess := UpCase(Guess);
  if (Ord(Guess)>='A') and (Ord(Guess)<='Z') then begin
   guessed := false;
   for i := Low(guesses) to High(Guesses) do // why hard code 1..20???
   begin
     if guess = guesses[i] then
       begin
         guessed := true;
         break;
       end;
   end;
  end;
 until (guessed = true);
 if guessed then
   WriteLn('An element in guesses matched your input')
 else
   WriteLn('No element in guesses array matches your input')
end;

关于delphi - 重复循环内的 Pascal for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6300706/

相关文章:

windows - ImageList_Add 在由 pcAnywhere 控制的 PC 上返回 -1

python - Lazarus 库在 OSX 的 Python 中使用 ctypes

Pascal 及其当前应用

delphi - GetEnumName TypeInfo 问题(pascal/Delphi 控制台)

delphi - Pascal编译器需要SecureZeroMemory函数吗?

delphi - delphi创建组件模板

delphi - 如何在Delphi中显示带有两个按钮(继续/关闭)的对话框

ios - 类似终端的应用程序 : UItextFied vs UITextView

windows - 在 Windows 上启动/停止和重启 Jenkins 服务

.net - PowerShell 解析 .NET 选项卡完成方法和属性