雖然在所有的編程語言之中,程序的執行都無非是順序、分支和循環等幾種結構,比如說,C中的if…else,switch…case,while和do…while, 以及Pascal中的if…then…else,case…of,while…do,repeat…until,幾乎就是一一對應的關系,只不過語法上有小小的差異而已。這樣的相似性使得我們在掌握一門語言之后,再學習其他語言就容易得多了。然而,語言之間的不同是細微而瑣碎的,如果不注意這些差別的話,它們遲早會從不知哪個角落跳出來,讓程序員陷入debug的噩夢。
讓我們來看一個例子。我們知道在一般的循環結構中,fo循環和while循環是可以轉換的,例如,在Pascal中
for I:=StartValue to EndValue do …;
可以轉換成相應的while 循環:
I:=StartValue;
while I<=EndValue do begin
…;
Inc(I);
end;
看起來,這兩種循環是完全一樣的。別忙,真的完全一樣嗎?下面是一段Delphi代碼,你可以先心算一下,看得出來的結果應該是多少:
procedure TForm1.FormCreate(Sender: TObject);
var
i, j : integer;
index : integer;
str : string;
begin
i := 0;
j := 3;
for index:=0 to j do begin
Inc(i);
if j<5 then Inc(j);
end;
str := IntToStr(i);
i := 0;
j := 3;
index := 0;
while index<=j do begin
Inc(i);
if (j<5) then Inc(j);