我可以在 pascal 中的 if 语句中使用 case 吗

can i use case inside if statement in pascal

我想在if语句中使用case,可以使用吗?因为我编译的时候总是报错 ;w;

我得到的错误:

Tahun.pas(26,21) Fatal: Syntax error, ";" expected but "ELSE" found
Tahun.pas(0) Fatal: Compilation aborted

这是我的代码:

uses Crt;
var
sisa, bulan, tahun : integer;

begin
ClrScr;
writeln('masukkan tahun'); read(tahun);
sisa := tahun mod 4;
if sisa =0 then
writeln('masukkan bulan 1-12'), read(bulan);
 case bulan of
  1: write('31');
  2: write('29');
  3: write('31');
  4: write('30');
  5: write('31');
  6: write('30');
  7: write('31');
  8: write('30');
  9: write('31');
  10: write('30');
  11: write('31');
  12: write('30');
  else write('bulan tidak lebih dari 12');
end;
else
writeln('masukkan bulan 1-12'), read(bulan);
 case bulan of
  1: write('31');
  2: write('28');
  3: write('31');
  4: write('30');
  5: write('31');
  6: write('30');
  7: write('31');
  8: write('30');
  9: write('31');
  10: write('30');
  11: write('31');
  12: write('30');
else write('bulan tidak lebih dari 12')
end;
 readln;
 readln;

end.

或者您知道如何改进代码? ;w;

感谢您的回答;w;

我希望你已经阅读了昨天评论中给出的建议的链接。所以这个问题有几个可能的答案:

1次-修复你的代码:

begin
  writeln('masukkan tahun');
  readln(tahun);
  writeln('masukkan bulan 1-12');
  readln(bulan);
  case bulan of
    1, 3, 5, 7, 8, 10, 12: writeln('31');
    2: if tahun mod 4 = 0 then
         writeln('29')
       else
         writeln('28');
    4, 6, 9, 11: writeln('30');
  else
    write('bulan tidak lebih dari 12');
  end;
  readln;
end.

2-优化一下:

const
  DinM: array [boolean, 1 .. 12] of byte =
  ((31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
   (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31));

begin
  writeln('masukkan tahun');
  readln(tahun);
  writeln('masukkan bulan 1-12');
  readln(bulan);
  writeln(DinM[tahun mod 4 = 0, bulan]);
  readln;
end.

第三:

使用预先设计的函数:Delphi 有一个函数 DaysInAMonth 描述 here. 拉撒路 has it 还有。

备注

请记住,所有这些方法(包括标准函数)在计算闰年时都会出错,因为并非所有 year mod 4 = 0 的年份都是闰年。例如1700、1800、1900、2100等年份不是闰年。