【问题标题】:how to get a variable out of a procedure in the right way in PASCAL?如何在 PASCAL 中以正确的方式从过程中获取变量?
【发布时间】:2014-06-03 08:11:09
【问题描述】:

我正在学习有关编程基础知识的互联网课程。制作图表后,我将其转换为代码,现在这是 PASCAL 语言。 我在程序上遇到问题,找不到答案,在课程中也找不到答案,也找不到一些 google-ing。 我想从一个过程中得到一个变量。现在我有一段工作代码,但我认为这不是好的工作方式。这是代码的摘录:

   program WELKEWAGEN;

   // declare your variables here
   var T, N, KM, vari, prijsDW, prijsBW, jrenGEBR, taksDW, taksBW, prijsB, verbrBW,         prijsD, verbrDW : real;

 procedure OPHALEN(para : string);
 begin
 repeat
 writeln('geef de ', para , ' op');
 readln(vari);
 until (vari > 0);
 end;

 begin   
 //this is the main program but there is more code ofcourse  
 OPHALEN('prijs benzinewagen');
 prijsBW := vari;
 //...
 end.

现在互联网课程说我应该这样编程:

begin
//...
prijsBW := OPHALEN('prijs benzinewagen');
//...
end.

但这不起作用。 我收到以下错误:

WELKEWAGEN.pas(24,14) Error: Incompatible types: got "untyped" expected "Real"
WELKEWAGEN.pas(50) Fatal: There were 1 errors compiling module, stopping

pas(24,14) 是这一行:prijsBW := OPHALEN('prijs benzinewagen');

【问题讨论】:

标签: pascal procedure


【解决方案1】:

过程不返回值,所以语法

prijsBW := OPHALEN('prijs benzinewagen');

无效。

如果你想返回一个值,你需要定义一个function来代替:

function OPHALEN(para : string): Real;
var
  Res: Real;
begin
  Res := 0;
  repeat
    writeln('geef de ', para , ' op');
    readln(Res);
  until (Res > 0);
  OPHALEN := Res;
end;

请注意,您使用的(坏)全局变量意味着您根本不必返回任何内容,因为过程可以直接访问和更改该全局变量(但您无法知道该过程何时完成):

procedure OPHALEN(para : string);
begin
  vari := 0;
  repeat
    writeln('geef de ', para , ' op');
    readln(vari);
  until (vari > 0);
end;

现代 Pascal 方言(例如 Delphi 和 FreePascal)通过使用为您自动声明的适当类型的函数结果变量,命名为 Result(因为它就是这样 -函数的结果):

function OPHALEN(para : string): Real;
begin
  Result := 0;
  repeat
    writeln('geef de ', para , ' op');
    readln(Result);
  until (Result > 0);
end;

如果需要返回多个值,可以使用var参数,可以在函数内部进行更改。

procedure OPHALEN(para: string; var RetVal: Real);
begin
  RetVal := 0;
  repeat
    writeln('geef de ', para , ' op');
    readln(RetVal);
  until (RetVal > 0);
end;

您的原始代码(以及我上面提供的示例)都无法让用户取消,顺便说一句。应该有某种方法可以让用户退出循环;否则,您的代码将无限循环,将para 写入屏幕,然后等待输入。这有惹恼用户的倾向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 2017-10-25
    • 1970-01-01
    相关资源
    最近更新 更多