2-13作业,请老师查阅

来源:2-13 作业题

Vcooli

2019-08-18 18:35:44

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>图形作业</title>

</head>

<body>

<form action="#" method="post">

    <input type="text" id="" name="scanf" placeholder="请输入要打印的行数"/>

    <br/>

    <input type="submit" value="金字塔" name="king"/>

    <input type="submit" value="空心菱形" name="ling"/>

</form>

<?php

//判断是否有_POST数据

error_reporting(E_ALL&~E_NOTICE);

if($_POST){

    $king=$_POST['king'];//用户点击金字塔按钮

    $ling=$_POST['ling'];//用户点击空心菱形按钮

    $scanf=$_POST['scanf'];//用户输入的值

    if (is_numeric($scanf) && ($scanf>0)){//判断用户输入的值必须为大于0的正数

        floor($scanf);//把浮点型取整

        }else{

        exit('非法数值,请重新输入');

    }

    if ($king){

                $tr=1;//打印行数

                while ($tr<=$scanf){

                    $null=1;//打印的空白

                    while ($null<=$scanf-$tr){

                        echo "<span style=\"color:white\">*</span>";

                        $null++;

                    }

                    $star=1;//每行打印的星星的数量

                    while($star<=$tr*2-1){

                        echo '*';

                        $star++;

                    }

                    $tr++;

                    echo '<br/>';

                }

            }

    elseif($ling){

$tr=1;//行数

while($tr<=$scanf){

$null=1;//空白数量

while($null<=$scanf-$tr){

echo "<span style=\"color:white\">*</span>";

                        $null++;

}

$star=1;//星星位置

while($star<=$tr*2-1){

if ($star==1||$star==2*$tr-1){//根据位置显示'*'

echo '*';

}else{

                echo "<span style=\"color:white\">*</span>";

            }

$star++;

}

$tr++;

echo '<br/>';

}

//菱形下半部分

$tr=$scanf-1;

while($tr>=1){

$null=1;

while($null<=$scanf-$tr){

echo "<span style=\"color:white\">*</span>";

$null++;

}

$star=$tr*2-1;

while($star>=1){

if($star==1||$star==$tr*2-1){

echo '*';

}else{

echo "<span style=\"color:white\">*</span>";

}

$star--;

}

$tr--;

echo '<br/>';

}

}

}

?>

</body>

</html>

写回答

1回答

好帮手慕小尤

2019-08-18

同学你好,在一般测试代码时,是不会使用错误抑制符的,所以关闭抑制符后报错,如图所示:

http://img.mukewang.com/climg/5d592bbc00018a7205900116.jpg

错误原因:由于程序第一次运行,并未接收到post值则开始定义变量造成的。

解决方法:使用isset()或者empty()检测是否有post数据,存在数据再执行金字塔或者空心菱形的操作。可以进行修改,代码如下:

<?php
	//判断是否有_POST数据
	if($_POST){

	    $scanf=$_POST['scanf'];//用户输入的值
	    if (is_numeric($scanf) && ($scanf>0)){//判断用户输入的值必须为大于0的正数
	        floor($scanf);//把浮点型取整
	    }else{
	        exit('非法数值,请重新输入');
	    }
	    if (isset($_POST['king'])){
	        $tr=1;//打印行数
	        while ($tr<=$scanf){
	            $null=1;//打印的空白
	            while ($null<=$scanf-$tr){
	                echo "<span style=\"color:white\">*</span>";
	                $null++;
	            }
	            $star=1;//每行打印的星星的数量
	            while($star<=$tr*2-1){
	                echo '*';
	                $star++;
	            }
	            $tr++;
	            echo '<br/>';
	        }
	    }elseif(isset($_POST['ling'])){
			$tr=1;//行数
			while($tr<=$scanf){
				$null=1;//空白数量
				while($null<=$scanf-$tr){
					echo "<span style=\"color:white\">*</span>";
					$null++;
				}
				$star=1;//星星位置
				while($star<=$tr*2-1){
					if ($star==1||$star==2*$tr-1){//根据位置显示'*'
						echo '*';
					}else{
			            echo "<span style=\"color:white\">*</span>";
			        }
					$star++;
				}
				$tr++;

				echo '<br/>';
			}
			//菱形下半部分
			$tr=$scanf-1;
			while($tr>=1){
				$null=1;
				while($null<=$scanf-$tr){
					echo "<span style=\"color:white\">*</span>";
					$null++;
				}
				$star=$tr*2-1;
				while($star>=1){
					if($star==1||$star==$tr*2-1){
						echo '*';
					}else{
						echo "<span style=\"color:white\">*</span>";
					}
					$star--;
				}
				$tr--;
				echo '<br/>';
			}
		}
	}
?>

注:同学可以上传作业哦!祝学习愉快!

0

0 学习 · 4928 问题

查看课程