Pascal for repeat循环中的循环

Chu*_*318 5 delphi console pascal

到目前为止你们都非常乐于助人,所以对你们来说还有另一个烦人的问题!

我有一个基本的单词猜谜游戏,用Pascal编写,用于Delphi 7中的控制台,其中猜测(对或错)存储在一个名为"猜测"的固定数组中,现在我需要做的是测试它们是否有效已经猜到了那封信.我有以下代码......

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次,并且应该结束,因为它是第一个字母并且不在"猜测"数组中,但是不断重复.在它循环for循环20次并且没有发现猜测字母的输入之后,它应该以布尔"猜测"为假退出.

在此先感谢您的帮助!

War*_* P 9

你写的代码毫无意义.

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

  2. 为什么使用一个始终为真的条件无限地重复相同的逻辑,并且一个条件可能很容易变成真的?我猜你已经在重复循环中显示了部分代码,而不是全部.在这种情况下,对代码示例的stackoverflow的一个很好的约定是放入类似do_something_here();的地方:在你真正有100多行的地方,你不想在这里显示.

  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;
Run Code Online (Sandbox Code Playgroud)

  • UpCase需要一个Char,所以是的,那些是Char变量.就个人而言,我发现一个长形式IF然后声明比a:= b = c更可读; (2认同)

小智 7

我的问题是它遵循for循环20次,并且应该结束,因为它是第一个字母并且不在"猜测"数组中,但是不断重复.在它循环for循环20次并且没有发现猜测字母的输入之后,它应该以布尔"猜测"为假退出.

你不能在循环中使用循环变量I:

Pascal For Loop

设计选择:Loop var必须是通常范围的序数类型

正常终止后,循环var未定义

循环var不能在循环中更改

循环参数可以更改,但它们只被评估一次,因此它不会影响循环控制

http://courses.cs.vt.edu/~cs3304/Spring00/notes/Chapter-7/tsld026.htm