【问题标题】:Statement expected but Function found error in my function code预期语句,但函数在我的函数代码中发现错误
【发布时间】:2018-06-14 10:55:10
【问题描述】:

所以下面是我创建的代码模块,用于验证用户输入是否在一个范围之间,但是这个错误一直出现在它的下方“预期的语句但找到了函数”,有什么想法吗?非常感谢

function get_choice(var Options: integer): integer;
      var
      choice: integer;

      begin
        while (true) do
          begin
              write('choose option 1 to', Options);

              try
                readln(choice);
                if (choice>=1) and (choice <=Options) then
                    get_choice := choice
                else
                    write('invalid range');
              except
                 write('not a number');
          end;
      end;

【问题讨论】:

  • 你要告诉 use 哪一行导致错误?
  • @Mawg,System.Write 可以处理多种类型的参数:Each output expression must be of a type Char, one of the Integer types (Byte, Shortint, Word, Longint, Cardinal), one of the floating-point types (Single, Real, Double, Extended, Currency), one of the string types (PChar, AnsiString, ShortString), a packed string, or one of the Boolean types (Boolean, Bool).
  • @Mawg: WriteWriteln 来自非常古老的时代。他们不需要像IntToStr 或类似的转换例程之类的东西。两者都是“编译器魔术”例程,即编译器知道它们并根据参数生成不同的代码序列。这也使他们接受多个不同的参数,这在引入array of const 之前是不可能的。 FWIW,如今,这些函数被某些人称为“内在函数”。
  • 哈哈!几十年来,我可能一直在用 Write and()` 不必要地调用 IntToStr() :-)
  • @Mawg:您可能想阅读这些例程:Write、Writeln、Read、Readln 并看到其中一些甚至具有额外的格式化选项,例如 Write(I:8, J:8);which 格式化 I 和 J 正确在他们自己的“字段”中,每 8 个字符。对于应该快速(并且可读)输出简单测试结果的控制台程序非常有用。

标签: delphi pascal


【解决方案1】:

正如Sharam 已经说过的,您错过了try..except..end 块的end。不过,我认为我可以通过一些提示来增强答案,以帮助您在将来避免这种情况。

  • 将您的 (begin .. end 块保持在同一列。try..except..endtry..finally..endrepeat..until 块也一样。
  • 利用IDE 的选项将begin 和and 块用线连接起来。 "结构突出显示。查看随附的屏幕截图。

【讨论】:

  • 这没有回答所提出的问题
  • 我不这么认为。帮助提示以避免将来发生同样的错误应该得到奖励,而不是轻描淡写。无论如何感谢您的评论。我宁愿将其放在评论中而不是答案中,但不幸的是,我的声誉还不允许这样做。 (26/50)
  • 那你应该先赢得声望。很抱歉,这是在 meta 上多次讨论过的网站政策。如果你也回答了这个问题,这个答案会很好。是否已经回答无关紧要。最低限度的基线是回答所提出的问题。那是没得商量的。如果您想添加更多内容,那就太好了。因此,您可以通过解决问题的编辑来解决我的批评。
  • 谢谢大卫,我现在明白了,并更新了答案。我会看看是否有时间检查元讨论。
  • 非常感谢 - 我明白 David 的意思,但这对我来说真的很有用,巧合的是,我之前问过的正是这个问题,这是一个更好的答案,所以如果你把它复制到那里,我会让它成为最受欢迎的答案!令人讨厌的是,由于某种原因,我的副本在颜色选项卡下没有结构突出显示。反正干杯
【解决方案2】:

你错过了end

              try
                readln(choice);
                if (choice>=1) and (choice <=Options) then
                    get_choice := choice
                else
                    write('invalid range');
              except
                 write('not a number');
              end;
         end
      end;

试试try..except 块必须有自己的结尾。

【讨论】:

  • 天哪,是的!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多