程序获取(项目:输出字符串); (在函数中)

procedure Get (Item : out String); ( in a Function)

我正在尝试 return 全局变量的字符串值,并希望在稍后的过程中使用使用它的函数。

function get_name return String
is begin
Put_line("Your name?");
 Get(name); -- name is in "globals"
 put(name);
return name;
end get_name;

打包文件=

package globals
is
name : String(1..20) ;
end globals; 

这里是在函数=

中使用的"Get"
       procedure Get (Item : out String);

现在,如果我在过程中使用该函数,它会编译但 =

启动时,没有执行 get,程序 "create" 有 "skip" 行 !!?

那么,是否可以使用此程序获取函数??

在 ??

之后如何调用包含它的函数?

如果您调用过程Get(Item : out String),那么您读取的字符数必须正好是 20 个字符。

如果你想使用函数get,你需要用它的值初始化一个变量,或者将它作为参数传递。例如

x : string := get_line; -- functional version that will read an entire line

put(get_line); -- read and entire line, pass it immediately to a procedure

至于为什么您的输入会跳过 get 而没有读取任何内容,这可能是因为您之前已经读取了一些输入,并且在输入中留下了 newline/end 行标记。如果您阅读数字,这种情况经常发生。

例如输入是

34\nThe next line\n

如果您读取一个整数,文件指针将显示您在...

34\nThe next line\n
..^

然后你请求一个 get_line,你最终只会读到行尾(你当前所在的位置),你将得到一个空字符串,并且没有阅读下一行。

解决办法是在每次get之后有一个skip_line。 所以

get(number); skip_line;

declare 
   input : string := get_line;
begin
   ...