質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

768閲覧

switch文の出力

chibikuro

総合スコア5

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/03/17 10:09

PHPを最近勉強し始め、以下の問題を解いています。

~~~~~~~~~~~~~~~~~~~~~

「結果は60点です。合格です。」という文章を表示させて下さい。

[条件]
・switch , case , break を使用する。
・90点以上は"パーフェクトです。"と表示。
・70点以上90点未満は"素晴らしい"と表示。
・50点以上70点未満は"合格です。"と表示。
・それ以下は"頑張りましょう!"と表示。
・60点の場合で表示。

~~~~~~~~~~~~~~~~~~~~~

私はこの問題の回答として以下のようなPHPを書きましたが『結果は60点です。頑張りましょう!』と出力されました。

「結果は60点です。合格です。」と出力するには以下のPHPをどのように変えれば良いのでしょうか。

~~~~~~~~~~~~~~~~~~~~~

<?php $s = 60; echo "結果は{$s}点です。"; switch ($s){ case '$s >= 90': echo "パーフェクトです。"; break; case '$s < 90 && $s >= 70': echo "素晴らしい"; break; case '$s < 70 && $s >= 50': echo "合格です。"; break; default: echo "頑張りましょう!"; } ?>

~~~~~~~~~~~~~~~~~~~~~

ご助言お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

switch 使うならこんな感じかなぁ。。。
やりたくないねw

php

1<?php 2$arr = [200, 100, 99, 90, 89, 70, 60, 50 , 49, 0, -50]; 3foreach ($arr as $s){ 4 echo "結果は{$s}点です。"; 5 $num = floor($s / 10); 6 switch ($num){ 7 case 10: 8 case 9: 9 echo "パーフェクトです。"; 10 break; 11 case 8: 12 case 7: 13 echo "素晴らしい"; 14 break; 15 case 6: 16 case 5: 17 echo "合格です。"; 18 break; 19 default: 20 echo "頑張りましょう!"; 21 } 22 echo PHP_EOL; 23} 24
結果は200点です。頑張りましょう! 結果は100点です。パーフェクトです。 結果は99点です。パーフェクトです。 結果は90点です。パーフェクトです。 結果は89点です。素晴らしい 結果は70点です。素晴らしい 結果は60点です。合格です。 結果は50点です。合格です。 結果は49点です。頑張りましょう! 結果は0点です。頑張りましょう! 結果は-50点です。頑張りましょう!

投稿2020/03/17 10:38

編集2020/03/17 11:56
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasima20

2020/03/17 11:14

break をこの位置に書くのは見ない気もしますが、 ロジックがはっきりしてよさげですね~ :-)
退会済みユーザー

退会済みユーザー

2020/03/17 11:56

> break をこの位置に書くのは見ない気もしますが 確かにwww 修正しました。
guest

0

本来、これはcaseやるべきものではありません。言語によっては、caseの後に定数式しか書けない例もあります。課題としてはふさわしくないと考えます。


一致以外の条件判定をどうしてもswitchにやらせたい場合、switch(true)と書いて、その後に式を並べる、という方法がありますが、このやり方には賛否両論があります。

php

1switch (true){ 2 case $s >= 90: 3 echo "パーフェクトです。"; 4 break; 5 case $s < 90 && $s >= 70: 6 echo "素晴らしい"; 7 break; 8 case $s < 70 && $s >= 50: 9 echo "合格です。"; 10 break; 11 default: 12 echo "頑張りましょう!"; 13}

投稿2020/03/17 10:16

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chibikuro

2020/03/17 10:21

ありがとうございます! 見識を広げることができました!
guest

0

ベストアンサー

case '$s >= 90':
case '$s < 90 && $s >= 70':
case '$s < 70 && $s >= 50':

シングルクォートで囲っていますが、不要かと思います。
文字列として扱われ、判定漏れがおきて default で処理されているものと思います。

投稿2020/03/17 10:13

yankee

総合スコア72

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chibikuro

2020/03/17 10:17

回答ありがとうございます! シングルクォートを外すと、「結果は60点です。合格です。」と出力されました。 1時間ほど悩んでいた問題を解決することができました。 ありがとうございます!
maisumakun

2020/03/17 10:22 編集

今回はたまたまswitch($s)でも動きましたが、「$sと条件式の値を比較する」ということになるので、$s = 0の場合を考えると正しく分岐しません。 https://3v4l.org/OUGtQ (一番上にある「パーフェクトです」に入り込んでしまいます) caseに条件式を書く場合は、switch(true)のほうが適切です。
chibikuro

2020/03/17 10:27

ありがとうございました。 視覚的に確認でき、正しく分岐しないということが分かりました。 今後はswitch(true)を使っていきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問