我正在使用pascal进行分配,但仍然遇到此错误'";"预期但是Else发现了#39;我已经看到很多问题,并尝试用它们来帮助自己,但没有运气。
我的代码
Program TeamWrite;
Var FName, txt : String[10];
UserFile : Text;
BEGIN
FName := 'Team';
Assign(UserFile, 'C:\Team.dat');
Rewrite(UserFile);
Writeln('Enter players name and score separated by a space, type end to finish');
if txt = 'end' then;
BEGIN
Close(UserFile)
End;
Else
BEGIN
Readln(txt);
Writeln;
Writeln(UserFile,txt);
End;
Until(txt = 'end');
End.
答案 0 :(得分:2)
在Pascal中,分号(即&#34 ;;")用于分隔语句,而不是结束语句。所以你应该说:
if txt = 'end' then
begin
Close(UserFile)
end
else
begin
Readln(txt);
Writeln;
Writeln(UserFile, txt)
end
请注意then
之后,else
之前和之后,以及end
之前的两个语句后面没有分号。
另请注意,您可以在语句和end
之间添加分号,例如:
begin
WriteLn;
WriteLn(txt); <-- this is allowed
end
但是编译器会将其解释为在分号后面有一个空语句:
begin
WriteLn;
WriteLn(txt);
(an empty statement here)
end
但是,这是无害的。
&#34;直到&#34;也是一个错误,因为它是一个保留字。在Pascal中有一个&#34;重复...直到&#34;循环,如:
i := 0;
repeat
WriteLn(i);
i := i + 1
until i > 10
它就像C&#34;做......而&#34;循环,只有条件反转。在你的程序中,我认为你应该在`if:
之前有一个repeat
repeat
if txt = 'end then
...
else
...
until txt = 'end'
答案 1 :(得分:0)
我不熟悉Pascal,但快速浏览一些我认为你不需要的网站;在第一个if语句之后:
if txt = 'end' then;
应该是
if txt = 'end' then
答案 2 :(得分:0)
您错放了一些;
if txt = 'end' then; // remove ';'
BEGIN
Close(UserFile) //add `;`
End; // remove ';'
Else
BEGIN
Readln(txt);
Writeln;
Writeln(UserFile,txt);
End;
Until(txt = 'end');
请参阅here