for循环执行条件有错?

aspiregao 2001-04-16 11:35:00

我在程序中以如下方式使用for语句,num是变量,由函数得到,当num是小于等于0时,即num-1<0,for循环内的语句应该不能被执行,但实际却执行了。谁能告诉我,这是怎么回事?

//示例代码
num:=fun();
for i := 0 to num-1 do
begin
......
end;
...全文
232 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kingron 2001-04-18
  • 打赏
  • 举报
回复
数据类型不一样!不要想当然!以为0-1就是-1!!!!!!
Kingron 2001-04-18
  • 打赏
  • 举报
回复
//faint
Dword(-1)=4294967295。
jp311 2001-04-17
  • 打赏
  • 举报
回复
if num>0 then
begin
for i:=0 to num-1 do
begin
.
.
.
end;
end
else ..........;
看一看行不行
武稀松 2001-04-17
  • 打赏
  • 举报
回复
用F7跟踪一下
不会的话可在循环中加showmessage(inttostr(i));看看i的值到底是不是小于0
aspiregao 2001-04-17
  • 打赏
  • 举报
回复
谢谢大家的参与,我发现问题出在我的num类型定义上,请看一下程序:
该程序中,showmessage将被执行。若将num,i的声明改为integer型,则showmessage不会被执行。
虽然找到了问题,但我不明白,word表示无符号数,integet表示有符号数,但是无论如何,num-1总是小于0的,for语句怎么会执行呢?

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
num : word;
implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
i:word;
begin
num := 0;
for i:=0 to num-1 do
begin
showmessage('Hello!');
end;

end;


end.


WuHeHai 2001-04-17
  • 打赏
  • 举报
回复
是不是我的眼花了???????
Kingron 2001-04-17
  • 打赏
  • 举报
回复
不可能!!!!!!
一定是你的num计算有误。
sxc 2001-04-17
  • 打赏
  • 举报
回复
怎么可能?
Whynothefirst 2001-04-17
  • 打赏
  • 举报
回复
num:=fun();
if num-1<0 then
for i := 0 to num-1 do
begin
......
end;
newyj 2001-04-17
  • 打赏
  • 举报
回复
不可能!!!!!!
一定是你的num计算有误。

执行FOR
以前先SHOWMESSAGE(INTTOSTR(NUM))看看会不会
出现你所说的问题。
delphibook 2001-04-17
  • 打赏
  • 举报
回复
是啊,你再调试调试!
lichp 2001-04-17
  • 打赏
  • 举报
回复
如果我没有记错的话,在C或者是BASIC语中的FOR循环是允许初值比末值大的。其中有一个Step如果为正的话,则初值应小于末值;为负,则初值应大于末值。Delphi中未曾用到这样的循环,估计也是能行的,不信你可以在begin和end之间加入一输入显示i值的函数,i就是从大到小了。
见识粗浅,我也不知道是不是这样的。
coldljy 2001-04-17
  • 打赏
  • 举报
回复
不可能!!!!!!
一定是你的num计算有误。
wangyue_lf 2001-04-16
  • 打赏
  • 举报
回复
呀~错了,是
if num>0 then ……
wangyue_lf 2001-04-16
  • 打赏
  • 举报
回复
num:=fun();
if num-1<0 then
for i := 0 to num-1 do
begin
......
end;
djhdu 2001-04-16
  • 打赏
  • 举报
回复
都贴出来看一看

5,927

社区成员

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

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