Pascal:理解if / then语句

时间:2015-09-05 12:42:31

标签: if-statement pascal

我目前正在移植经典Moria游戏的VMS Pascal版本,但我不确定我是否理解if / then语句的限制(我以前从未在Pascal中编程)。

到目前为止,我的理解是没有开始/结束,那么if / then块只包含一个后面的语句。如果是这种情况,那么在下面的代码中;

if (i4 > 0) then
  with inventory[i4] do
    begin
      objdes(out_val,i4,false);
      msg_print('Your ' + out_val + ' glows faintly!');
      if (enchant(toac)) then
        begin
          flags := uand(%X'7FFFFFFF',flags);
          py_bonuses(blank_treasure,0);
        end
      else
        msg_print('The enchantment fails...');
    end;
  ident := true;

ident := true;将在if (tval > 0) then块之外,这意味着即使i40ident仍会设置为{{1} }}

如果这是正确的,那么它是否意味着来自UMoria(C端口)的以下代码是错误的?

true

...因为i_ptr = &inventory[INVEN_WIELD]; if (i_ptr->tval != TV_NOTHING) { objdes(tmp_str, i_ptr, FALSE); (void) sprintf(out_val, "Your %s glows faintly!", tmp_str); msg_print(out_val); if (enchant(&i_ptr->tohit, 10)) { i_ptr->flags &= ~TR_CURSED; calc_bonuses(); } else msg_print("The enchantment fails."); ident = TRUE; } 在if块内。

我在几个地方看到了类似的例子 - 我猜这些可能是为C端口改变了 - 但是我希望在我改变太多代码之前得到澄清。

1 个答案:

答案 0 :(得分:2)

您对流量控制的评估是正确的。但是,在原始Pascal代码中将indent赋值为true很可能是由于缩进而在if / then语句中。

这就是为什么我总是在IDE中的源代码上运行自动缩进。它冲掉了这些错误。 (Python是对此的过度反应,因为我已经看到了缩进错误,并且它不适合自动IDE帮助。)

如果有人校对并对其进行了测试,我怀疑C端口是否正确。

测试驱动开发在这里有所帮助,因为它有助于定义真正意图的内容。