关于FOR语句的一个奇怪的现象,请进

F10 2004-05-02 05:18:47
for m := 1 to 35 do
if bnum[m] = bnum[m+1] then astr := astr + ',' + inttostr(anum[m])
else astr := astr + chr(13) + chr(10) + inttostr(bnum[m]) + ':' + inttostr(anum[m]);

这样一条语句,我逐句观察的时候,发现m是从35往1走得,睡知道怎么回事?
另外,在这段程序外,不能对m进行赋值,即使赋了,也不提示错,但运行中空过此行?
...全文
64 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
F10 2004-05-02
  • 打赏
  • 举报
回复
谢谢大家,已经好了,我重新启动了机器,再编译的时候就没有上面的现象了。
hewei2003 2004-05-02
  • 打赏
  • 举报
回复
你测试一下downto呢?
F10 2004-05-02
  • 打赏
  • 举报
回复
快晕了,我把这段代码单独放到一段里,还是不行。

procedure TForm8.Button10Click(Sender: TObject);
var
astr : string;
i,j,m,a1,b1 : integer;
aNum, bNum : array [1..36] of integer;
begin
astr := '';
for i := 1 to 36 do begin aNum[i] := strtoint(StringGrid1.cells[i, StringGrid1.RowCount-5]); bNum[i] := i; end;
for i := 1 to 35 do
&&&&&&&&&&&&&&
for j := i + 1 to 36 do
&&&&&&&&&&&&&&
if aNum[i] > aNum[j] then
begin
a1 := aNum[i]; aNum[i] := aNum[j]; aNum[j] := a1;
b1 := bNum[i]; bNum[i] := bNum[j]; bNum[j] := b1;
end;

astr := inttostr(anum[1])+ ':' + inttostr(bnum[1]) ;


********
for m := 1 to 35 do
if bnum[m] <> bnum[m+1] then astr := astr + chr(13) + chr(10) + inttostr(anum[m+1])+ ':' + inttostr(bnum[m+1]) else astr := astr + ',' + inttostr(anum[m+1]);
********

memo1.Lines.Add(astr);
end;

就是在********之间的代码出现了上面的问题,另外,如果把&&&&&&&&&&&&&&之间的for j := i + 1 to 36 do 换成j := 2 to 36 do也会出现类似的问题,究竟怎么回事呀?
ctx 2004-05-02
  • 打赏
  • 举报
回复
在For循环中不允许改变m的值,这是object pascal的规定
capoatguitar 2004-05-02
  • 打赏
  • 举报
回复
这个满有趣的,学习。
F10 2004-05-02
  • 打赏
  • 举报
回复
什么意思??
YFLK 2004-05-02
  • 打赏
  • 举报
回复
你设置了编译优化
YFLK 2004-05-02
  • 打赏
  • 举报
回复
如你所说,可能是anum[]中存放的数据顺序反了,
在循环过程中是不能对循环变量进行赋值的,在循环体外,m就不时循环变量了,这时可对其赋值.为什么会出现你所说的情况要看代码啦.
F10 2004-05-02
  • 打赏
  • 举报
回复
即使我在前面加一条m:=0;也不行,根本不执行,而且也不报错。见鬼了呀
ssoj 2004-05-02
  • 打赏
  • 举报
回复
不可能啊,从这一句语法是没有错误啊?
可能是不是你别的地方定义错了啊?
最大的可以是bnum[x]和anum[x]的附值顺序错了.

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧