For/Do语句中循环体内的循环变量不能改变吗?
用了Delphi好几个月,今天突然发现,居然在For/Do 语句中循环变量的值不能改变,很是让我吃惊。比如我想让循环变量的增量不是1而是其他的数,用了如下语句:
for i:=0 to 100 do
begin
……
i:=i+10;
end;
结果编译出错。
当然我可以将程序改做While语句或者另加几个变量来实现,但是我觉得delphi不会这么笨吧?难道没有改变循环变量的增量的方法吗?
问题点数:10、回复次数:8Top
1 楼kuangning(郎之间)回复于 2002-04-30 12:29:51 得分 0
delphi的却不支持!
但并不是delphi笨
你有很多办法可以实现
如:
I := 0 ;
repeat
.......
I := I + 10 ;
until i >= 100 ;Top
2 楼eulb(执子之手,与子偕老)回复于 2002-04-30 12:30:28 得分 0
呵呵
确实如此
毕竟金无足赤
你只能变通一下了Top
3 楼Heray(Heray)回复于 2002-04-30 12:35:26 得分 0
哦,谢谢你指出来。
C和Basic和Matlab程序写多了,初次见到不支持循环变量改变的语言,感到有点吃惊。Top
4 楼dancemaple(枫之舞)回复于 2002-04-30 12:37:09 得分 0
是不是从VB转过来的?
只有解释执行的程序才可以在中间修改for循环变量,编译执行(FORTRAN/Pascal/C/C++等)都不行。这不是笨的问题。
可以用while或repeate循环Top
5 楼zswang(伴水清清)(专家门诊清洁工)回复于 2002-04-30 12:42:05 得分 10
Delphi2 之前允许
但32位的for循环已经作了优化处理
所有就不能在for循环中该变循环变量的值
你可以作如下调试
for I := 5 to 10 do //看看I的值是不是5->10
Caption := 'ff';
结果不是!因为for已经作了优化处理
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
T: DWORD;
begin
T := GetTickCount;
for I := 1 to 10000000 do ;
//你可以比较一下它们执行的速度
ShowMessage(IntToStr(GetTickCount - T)); //39
T := GetTickCount;
I := 1;
while I <= 10000000 do Inc(I);
ShowMessage(IntToStr(GetTickCount - T)); //59
end;
Top
6 楼Heray(Heray)回复于 2002-04-30 12:48:46 得分 0
回 dancemaple朋友:
我是C转过来的,我还是比较倾向于写for(i=0;i<=100;i+=10)……这样的语句,这样写程序又简短又容易读。对吗?Top
7 楼zswang(伴水清清)(专家门诊清洁工)回复于 2002-04-30 12:54:46 得分 0
for I := 0 to 10 do
{ 使用 I * 10 也没有什么不方便 }
争论语言或者是工具的好坏是没有意义的
反正不是信仰什么宗教、什么好用就用什么
但不要自己没有能力 驾御她 就说三道四
不同语言有不同的特性
谁叫你不是她的创造者
Top
8 楼dancemaple(枫之舞)回复于 2002-04-30 12:57:53 得分 0
我觉得两者都不错,Pascal的也很清晰。但循环结构Pascal令人不太满意的地方就是for循环变量的递增步长只能为1或-1,而C的可以随意Top




