簡體   English   中英

在此代碼中查找錯誤。此程序是用 PHP 編寫的

[英]Find Error in this code.this program is written in PHP

<?php 
   echo "Enter Month:";
    $m=trim(fgets(STDIN)); 

    echo "Enter Day:";
    $d=trim(fgets(STDIN));
    //{Write your code here

   if($m>=3 && $m<=6)
   {
       if($d>=20){
           echo"Spring";
       }

   }
   else
   {
       echo"Not Spring";
   }





    //}
    exit;
?>

在此代碼中查找錯誤 3 月 20 日(含)和 6 月 20 日(含)之間的持續時間為春季。 編寫一個程序,將月和日作為正整數輸入並顯示其是否為春季時間。

這看起來很像課堂作業或其他東西,你從要求(甚至不是很好地要求)別人做這件事中獲得的收益很少......

話雖如此,我很無聊,所以我會指導你一點:

if($m>=3 && $m<=6)
{
    if($d>=20){
        echo"Spring";
    }
}

這個邏輯是有缺陷的。 這將僅在 3 到 6 個月的 20 到 31 天返回“Spring”,這意味着像 4 月 1 日 (01/04) 這樣的日期不會返回 Spring。

您的 if 語句應該類似於“現在是第 3 個月和第 20 天或之后,或者是第 4 個月,或者是第 5 個月,或者是第 6 個月和第 20 天或之后”:

if(($m == 3 && $d >= 20) || ($m == 4) || ($m == 5) || ($m == 6 && $d <= 20))

額外的:

根據您上面的代碼判斷,以下內容可能太高級了,但我想指定它,因為將日期作為字符串處理總體上是一個壞主意,並且在大多數情況下會導致災難。 如果你沒有得到它,暫時把它放在一邊。

處理它的最好方法是使用 PHP DateTime對象威脅那些作為真實日期而不是整數:

$beginingSpring = Datetime::createFromFormat('m-d', '03-20'); // March 20th.
$endSpring = Datetime::createFromFormat('m-d', '06-20'); // June 20th.
$date = Datetime::createFromFormat('m-d', $m.'-'.d); // Entered date

if($date >= $beginingSpring && $date <= $endSpring){ 
    echo 'Spring'; 
}else{ 
    echo 'Not spring'; 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM