如何修复“';'预期,但找到“ else””

问题描述 投票:-2回答:1

在此程序中,我想从列表(记录)中找到年龄最大的人。我确实试图切换语法,但这无济于事。有人可以建议我一些吗?(免费Pascal)错误:';'预期,但找到了其他]

这是一个从文件中读取带有名称和出生日期的记录的程序。我试图排除开始和结束,但没有成功。

Procedure Virsta;
Var v1,v2,v3:integer;

Begin
v1:=LP[1].DataNasterii.Anul;
v2:=LP[1].DataNasterii.Luna;
v3:=LP[1].DataNasterii.Ziua;
for i:=1 to n do
Begin
if LP[i].DataNasterii.Anul=v1 then
        if LP[i].DataNasterii.Luna=v2 then 
                if LP[i].DataNasterii.Ziua=v3 then 
                Begin
                writeln('Atentie! Avem mai multe persoane cu aceeasi data');                  
                break;
                End;

else if LP[i].DataNasterii.Luna<v2 then
                                    Begin
                                                                         v1:=LP[i].DataNasterii.Anul;
                                                                         v2:=LP[i].DataNasterii.Luna;
                                                                         v3:=LP[i].DataNasterii.Ziua;
                                      End
                              else if LP[i].DataNasterii.Anul<v1 then
                                                                Begin
                                                                 v1:=LP[i].DataNasterii.Anul;
                                                                 v2:=LP[i].DataNasterii.Luna;
                                                                 v3:=LP[i].DataNasterii.Ziua;
                                                                 End;
End;

我希望输出一个字符串(人的名字)。

syntax-error freepascal
1个回答
0
投票

很难跟您的代码相依,如果声明,这是程序正确格式的一种解释:

Procedure Virsta;
Var 
   v1,v2,v3:integer;

Begin
   v1:=LP[1].DataNasterii.Anul;
   v2:=LP[1].DataNasterii.Luna;
   v3:=LP[1].DataNasterii.Ziua;
   for i:=1 to n do
      Begin
         if LP[i].DataNasterii.Anul=v1 then
            if LP[i].DataNasterii.Luna=v2 then 
               if LP[i].DataNasterii.Ziua=v3 then 
                  Begin
                     writeln('Atentie! Avem mai multe persoane cu aceeasi data');                  
                     break;
                  End
               else
                  if LP[i].DataNasterii.Luna<v2 then
                     Begin
                        v1:=LP[i].DataNasterii.Anul;
                        v2:=LP[i].DataNasterii.Luna;
                        v3:=LP[i].DataNasterii.Ziua;
                     End
                  else
                     if LP[i].DataNasterii.Anul<v1 then
                        Begin
                            v1:=LP[i].DataNasterii.Anul;
                            v2:=LP[i].DataNasterii.Luna;
                            v3:=LP[i].DataNasterii.Ziua;
                        End;
End;

您可以通过缩进来了解如何正确遵循程序的逻辑。

请注意,上面是您对其进行编程的方式,但与此完全不同:

Procedure Virsta;
Var 
   v1,v2,v3:integer;

Begin
   v1:=LP[1].DataNasterii.Anul;
   v2:=LP[1].DataNasterii.Luna;
   v3:=LP[1].DataNasterii.Ziua;
   for i:=1 to n do
      Begin
         if LP[i].DataNasterii.Anul=v1 then
            Begin
               if LP[i].DataNasterii.Luna=v2 then 
                  Begin
                     if LP[i].DataNasterii.Ziua=v3 then 
                        Begin
                           writeln('Atentie! Avem mai multe persoane cu aceeasi data');                  
                           break;
                        End;
                  End
               else
                  Begin
                     if LP[i].DataNasterii.Luna<v2 then
                        Begin
                           v1:=LP[i].DataNasterii.Anul;
                           v2:=LP[i].DataNasterii.Luna;
                           v3:=LP[i].DataNasterii.Ziua;
                        End;
                  End;
            End
         else
            Begin
               if LP[i].DataNasterii.Anul<v1 then
                  Begin
                      v1:=LP[i].DataNasterii.Anul;
                      v2:=LP[i].DataNasterii.Luna;
                      v3:=LP[i].DataNasterii.Ziua;
                  End;
            End;
End;

您可以通过这些示例看到正确格式化代码的重要性。您会看到else语句始终直接位于else语句的if语句之下。额外的开始和结尾可以很清楚地表明else属于哪个if语句。您真的不能将else与嵌套的if语句一起使用,除非您按照我所示的方式用begin和end定义它们。

© www.soinside.com 2019 - 2024. All rights reserved.