帕斯卡错误 - 预期";"但找到了Else。

3

我正在使用Pascal语言完成一项作业,但是遇到了这个错误:“需要分号,但是找到了Else”。我看到了很多类似的问题并尝试着去借鉴,但是没有成功。

我的代码:

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.  
3个回答

3

Pascal语言中,分号(即";")用于分隔语句而非结束语句。因此,你应该这样表达:

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

这是无害的。

"until"也是一个错误,因为它是一个保留字。在Pascal中有一个"repeat...until"循环,比如:

i := 0;
repeat
  WriteLn(i);
  i := i + 1
until i > 10

这类似于C语言中的“do...while”循环,只不过条件被反转了。在您的程序中,我认为您应该在if之前加上一个repeat

repeat
  if txt = 'end then
    ...
  else
    ...
until txt = 'end'

谢谢您的快速回复,我已经尝试过了,但现在错误不再是“找到Else”,而是“找到Until”。 - R3CK2
这是因为"until"是一个保留字。请参见我上面的编辑。 - ycsun
我仔细查看了你的程序,现在我明白你没有调用一个名为"Until"的函数。请再次查看我的修改。 - ycsun

0
你放错了一些分号。
if txt = 'end' then; // remove ';' 
    BEGIN  
        Close(UserFile) //add `;`
    End;  // remove ';' 
Else  
    BEGIN  
        Readln(txt);  
        Writeln;  
        Writeln(UserFile,txt);  
    End;  
Until(txt = 'end'); 

请参考这里


0

我对Pascal不太熟悉,但是快速浏览了一些网站后,我认为在第一个if语句之后不需要加分号:

if txt = 'end' then;  

应该是这样的

if txt = 'end' then

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接