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
你写的代码毫无意义.
要在找到猜测时退出for循环,请break在猜测:= true下面添加一个.
为什么使用一个始终为真的条件无限地重复相同的逻辑,并且一个条件可能很容易变成真的?我猜你已经在重复循环中显示了部分代码,而不是全部.在这种情况下,对代码示例的stackoverflow的一个很好的约定是放入类似do_something_here();的地方:在你真正有100多行的地方,你不想在这里显示.
如果你展示了var声明,那么我们可以看到你的类型会很棒.
如果符合以下条件,您的代
这里有一些代码可以做一些至少有用的代码:
(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)
小智 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