CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

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

楼主F10()2004-05-02 17:18:47 在 Delphi / VCL组件开发及应用 提问

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进行赋值,即使赋了,也不提示错,但运行中空过此行? 问题点数:20、回复次数:10Top

1 楼ssoj(超超型英帅靓正)回复于 2004-05-02 17:53:54 得分 0

不可能啊,从这一句语法是没有错误啊?  
  可能是不是你别的地方定义错了啊?  
  最大的可以是bnum[x]和anum[x]的附值顺序错了.Top

2 楼F10()回复于 2004-05-02 17:59:52 得分 0

即使我在前面加一条m:=0;也不行,根本不执行,而且也不报错。见鬼了呀Top

3 楼YFLK(远方来客)回复于 2004-05-02 18:16:12 得分 20

如你所说,可能是anum[]中存放的数据顺序反了,  
  在循环过程中是不能对循环变量进行赋值的,在循环体外,m就不时循环变量了,这时可对其赋值.为什么会出现你所说的情况要看代码啦.Top

4 楼YFLK(远方来客)回复于 2004-05-02 18:17:59 得分 0

你设置了编译优化Top

5 楼F10()回复于 2004-05-02 18:39:45 得分 0

什么意思??Top

6 楼capoatguitar(菠萝蜜汁红塔山)回复于 2004-05-02 18:54:18 得分 0

这个满有趣的,学习。Top

7 楼ctx(ctx62)回复于 2004-05-02 19:05:05 得分 0

在For循环中不允许改变m的值,这是object   pascal的规定Top

8 楼F10()回复于 2004-05-02 19:07:38 得分 0

快晕了,我把这段代码单独放到一段里,还是不行。  
   
  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也会出现类似的问题,究竟怎么回事呀?Top

9 楼hewei2003(为为)回复于 2004-05-02 19:11:45 得分 0

你测试一下downto呢?Top

10 楼F10()回复于 2004-05-02 19:18:07 得分 0

谢谢大家,已经好了,我重新启动了机器,再编译的时候就没有上面的现象了。Top

相关问题

  • update 语句后检查 sqlnrows 返回值奇怪现象
  • 关于foreach语句的一个奇怪现象
  • 奇怪的语句
  • 奇怪的语句!!!!!!!
  • 一个关于sql语句的奇怪现象,不知道怎么回事
  • 奇怪的分支语句?
  • 奇怪的FOR...NEXT语句
  • 奇怪的查询语句!
  • 奇怪的if语句问题
  • sql语句问题,奇怪

关键词

  • 代码
  • 循环
  • anum
  • bnum
  • astr
  • inttostr
  • 赋值
  • chr
  • 出现
  • then

得分解答快速导航

  • 帖主:F10
  • YFLK

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo