Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement 我可以在pascal中的if语句中使用case吗_If Statement_Pascal_Freepascal_Case Statement - Fatal编程技术网

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

If statement 我可以在pascal中的if语句中使用case吗,if-statement,pascal,freepascal,case-statement,If Statement,Pascal,Freepascal,Case Statement,我想在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');

我想在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

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

1st–修复您的代码:

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.
2nd–要优化它:

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
拉撒路也是

注意


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

阅读带有begin/END的复合语句谢谢,我现在就读;W与其在您的
case
语句中嵌入
write
语句,不如编写一个具有输入参数的函数,该参数指定月数以及年份是否为闰年,并返回该月的天数。您能给我一个关于具有输入参数的函数的简单示例吗;W这是学习如何编程的一种无望的方式。任何像样的介绍文字都会教你函数是什么。你对什么是堆栈溢出有错误的认识。