我是Pascal的新手,我正在尝试编写一个简单的程序,但是在函数之间传递值时遇到了麻烦。这是我的一小部分:
program numberConverter;
const
maxValue = 4999;
minValue = 1;
var num: integer;
function convertNumeral(number: integer):string;
var j: integer;
begin
if ((number < minValue) OR (number > maxValue)) then
begin
writeln(number);
writeln('The number you enter must be between 1 and 4999. Please try again:');
read(j);
convertNumeral := convertNumeral(j);
end
else
if (number >= 1000) then
convertNumeral := 'M' + convertNumeral(number -1000)
{more code here, left it out for space}
end;
begin
writeln;
writeln('Enter an integer between 1 and 4999 to be converted:');
read(num);
writeln;
writeln(num);
writeln(convertNumeral(num));
end.
我的问题是来自writeln(converNumeral(num))的值(主要是'num')没有传递给convertNumeral函数,并且想知道Pascal是否会这样做。我认为它是因为我没有声明数字是变量,但是当我这样做时,我得到一个编译错误,它无法完成第二个if语句。谢谢你的时间。
答案 0 :(得分:2)
是的,值肯定会传递给函数。我保证num
确实传递给convertNumeral
。在该函数中,number
获取num
中的任何值。或许您如何观察计划的行为存在问题。
您对number
所做的更改(如果有)不会反映在num
中。该参数已按值传递,因此number
存储num
中存储的值的副本;他们是两个截然不同的变量。您可以使用var
通过引用传递参数,如果这是您想要的。
对convertNumeral
的每次递归调用都会获得number
的新实例,因此一旦函数返回,对number
所做的更改(如果有)将不会显示给来电者。每个调用都有自己的number
和j
版本。