关于PASCAL语言的,下面这个程序我不知道错哪里了,输入数之后,运行,它就一直输出按什么都停不不下来。

begin
for i:=1 to 5 do readln(a[i];
for i:=1 to 4 do
begin
for j:=i+1 to 5 do
if a[i]>a[j] then
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
end;
for i:=1 to 5 do write(a[i]:3);
end;
end.

如果要是在倒2个end上面也就是在for i:=1 to 5 do write(a[i]:3);
readln
end;
end.
如果是这样子的话,运行后,输入什么,程序就输出什么,不会按顺序,而且程序退不回去,只有在那个输出界面了,
为什么会这样啊???
折腾死了~
好心人高手们告诉我把~谢谢
跪求~~要讲错在哪里,原因,不要单单给我一个正确的程序,那我也有,
·只剩下5分了,小弟会感谢你的~~

楼主,你好:首先程序退不回去,是死循环,是因为你打的是readln,而readln是输入一个数回车一次,这是第一个错误,应把输入时的readln删掉ln变成read。这时候你再输出会发现他输出了不止100遍,这是因为第四行多加了一个begin所以说输出的时候也归属于第三行的循环语句,而i和j每加一个数它就输出一次,这是第二个错误,应把begin删除,在将倒数第二行的end;删除就o了。
正确答案:
program t1;
var a:array[1..5] of integer;
i,j,t:integer;
begin
for i:=1 to 5 do read(a[i]);
for i:=1 to 4 do
for j:=i+1 to 5 do
if a[i]>a[j] then
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
end;
for i:=1 to 5 do write(a[i]:3);
end.
希望对你有帮助。追问

那要是第4行的BEGIN不去掉的话。END是不是要在倒4行多加上,然后把结尾的END去掉一个,这样行吗??

追答

这样也可以,但是比较麻烦,可以去掉不用,占用空间。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-27
一个问题问了几遍啊,另外一边我回答过了自己看吧
相似回答