#!/usr/bin/perl
@month = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
@week = ("Sunday", "Monday","Tuesday", "Wednesday","Thursday", "Friday",
"Saturday");
print "date:\n";
$date=<STDIN>;
print "mon:\n";
$mon=<STDIN>;
print "year:\n";
$year=<STDIN>;
if ( ($year % 400 == 0) || ($year % 4 == 0) && ($year % 100 != 0) )
{
$month[1] = 29 ;
for($i = 0 ; $i < $mon - 1 ; $i++)
{
$s = $s + $month[$i] ;
$s = $s + ($date + $year + ($year / 4) - 2) ;
$s = $s % 7 ;
}
}
print $week[$s+1] ;
Run Code Online (Sandbox Code Playgroud)
我一直在努力学习perl几天,然后我编写了代码来查找给定日期的那一天.实际上我从C代码转换了这个.但它不成功.输出始终是星期一.我在哪里弄错了?
正如@Chris Turner指出的那样,代码中没有路径可以处理不是闰年的情况.要解决此问题并实现既定目标,只需对代码进行一处小改动即可.
if( ($year % 400 == 0) || ($year % 4 == 0) && ($year % 100 != 0) ) {
$month[1] = 29 ;
for($i = 0 ; $i < $mon - 1 ; $i++) {
...
}
}
print $week[$s+1] ;
Run Code Online (Sandbox Code Playgroud)
应该重写并重新缩进为
if( ($year % 400 == 0) || ($year % 4 == 0) && ($year % 100 != 0) ) {
$month[1] = 29 ;
}
for($i = 0 ; $i < $mon - 1 ; $i++) {
...
}
print $week[$s+1] ;
Run Code Online (Sandbox Code Playgroud)
因此$month[1]只会针对闰年进行更新,但for循环中的代码始终会运行.
经验丰富的Perl程序员也会建议您开始使用每个脚本
use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)
因为这些pragma促进了良好的编程实践,并有助于在开发早期发现许多错误.他们没有帮助解决这个问题,但如果你开始使用它们,他们将帮助解决下一个问题.