我在编程时用过一个循环
  for i:=1 to 20 do
    if u[i]=1 then
       showmessage('asdf');
可是没想到,当第一次执行到if语句的时候,i的值竟然是20,然后i的值每次递减!
不知道是什么原因,有没有什么办法能让i正常的递增??

解决方案 »

  1.   

    这是编译器做了优化。
    如果是这样:
    var
      j: Integer;
    // ...for i:=1 to 20 do
    begin
      j := i;  
      if u[i]=1 then
        showmessage('asdf');
    end;
    这样i的值就是1->20了
      

  2.   

    那我在执行段程序的时候i的值竟然是0,但此时num的值为2;以面也有也个循环用i做了循环变量;不知这又是怎么回事;
        for i:=1 to num-1 do
        begin
          adodataset2.Close;
          if expertlevel[i]='任意级别' then
            adodataset2.CommandText:='select * from 专家 where  类别='
                                      +''''+expertclass[i]+''''
          else
            adodataset2.CommandText:='select * from 专家 where  类别='+''''+expertclass[i]+'''' +' and  专家等级=' + ''''+
                                     expertlevel[i]+'''';
          adodataset2.Open;
      

  3.   

    i 的递增与 u[i]=1 没有必然的关系,你的u[20]一定是1。