导致这段代码出现问题的原因是什么?

Loa*_*ati 1 pascal user-input

我只是想知道为什么这个问题发生在我身上.如果你能帮助我,我会很感激.

Program factorial;
uses crt;
var
  f, i: Integer;
begin
  f:=1;
  for i:=1 to 5 do
    f:= f * i;
  write(f);
  readkey;
end.
Run Code Online (Sandbox Code Playgroud)

好的,这很好,结果是120.这是真的.

现在,这是问题所在.如果我要求用户输入数字的值,它将无法正常工作.

Program factorial;
uses crt;
var
  i,r: Integer;
begin
  write('Enter the number');
  read(r);

  for i:=1 to r do
    r:= r * i;

  write(r);
  readkey;
end.
Run Code Online (Sandbox Code Playgroud)

如果我写了5,输出将是600.

Vin*_*nie 10

您使用值r作为循环的停止条件并修改循环中的值.

Program factorial;
uses crt;
var
    i,r, f: Integer;
begin
  write('Enter the number');
  read(r);
  f := 1;
  for i:=1 to r do
     f:= f * i;
  write(f);
  readkey;
end.
Run Code Online (Sandbox Code Playgroud)