红萝卜 发表于 2013-1-29 23:07:48

为什么函数在传递参数的时候,数值总是不对?

代码如下,在一个过程里面得到了一组数据,用一个数值保存的,然后调用两个过程把这个数值作为参数,但是在调用的过程里面得到的数组中的数值不对,不知怎么搞,小弟初学,大侠路过指点一二,谢谢了。程序是想把EDIT1中输入的用空格隔开的数字,在EDIT2中排列好,待用。(小甲鱼视频冒泡排序的部分)

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
str,tmp: string;
i,t: Integer;
zhengli: Array of Integer;
n: Integer;

begin
str:=Trim(edt1.Text);
SetLength(zhengli,Length(str));
t:=0;
i:=0;
while (i<=Length(str)) do
begin
    while ((str<>#32 ) and (str<>#0)) do
    begin
      tmp:= tmp+str;
      inc(i);
    end;
    if (tmp<>'') then
    begin
      zhengli:= StrToInt(tmp);
      inc(t);
      tmp:='';
    end;
    inc(i);
end;
// for n:=0 to (t-1) do
    //edt2.Text:= edt2.Text + IntToStr(zhengli) + ' ';   //在这里显示出来的数值就完全正确
paixu(zhengli);//传递这个数组,调用这个过程后得到的数值就变了
end;

procedure TForm1.paixu(shuzu: array of Integer);
var
n: Integer;

begin   //到这里后传递过的数组里面多了组0,不知是从哪里来的?
edt2.Text:='';
for n:=0 to High(shuzu) do
    edt2.Text:= edt2.Text + IntToStr(shuzu) + ' ';    //显示出来的数值 多了很多组0
end;
end.



这个程序编译后杀毒软件也报有病毒,是啥原因啊?
工程下载

s0512 发表于 2013-1-30 07:54:00

SetLength(zhengli,Length(str)); 这句你再看下。例:3 2 1 通过这句就定义了5个数组,加上了中间的空格在内的。

s0512 发表于 2013-1-30 07:57:54

{:2_27:}记得当时我做这题时,是在zhengli:= StrToInt(tmp);之前加多句SetLength(zhengli,Length(zheng) + 1);
..

红萝卜 发表于 2013-1-30 09:41:34

谢谢老大帮忙!在没有调用   paixu(zhengli)   这个过程前数组里面的数据是正确的,就是调用这个过程后,得到的数组里面的数据才改变的,是怎么回事啊 ?

红萝卜 发表于 2013-1-30 09:48:10

应该是数组长度设置的不对,
在zhengli:= StrToInt(tmp);之前加多句SetLength(zhengli,Length(zhengli) + 1);
就正常了。
我的杀毒软件是avast ,上面的工程编译后老是报有病毒,自动删除生成的exe文件,我要把杀毒软件关闭才行,如何可以解决这个问题啊

沈纪重724 发表于 2013-1-31 17:01:15

看贴不回贴 都什么习惯呀? http://pimg.163.com/club/newclub/images/PP0.gif





















http://qb.lqualyn.com/images/sigline.gif
夏季穿什么防辐射服好
页: [1]
查看完整版本: 为什么函数在传递参数的时候,数值总是不对?