以下のプログラムを実行したのですが、硬貨がそれぞれ何枚返ってくるのかの部分が正しく計算できていません。 改善方法を教えてください。
sample6-1.html
<html><body>
自動販売機で120円のジュースを買います。<br>
1000円までのお金を入れてください。<br><br>
<form action="sample6.php" method="POST">
お金を<input type="text" name="yen" size="5" value="">円入れます。<br>
<input type="submit" value="購入">
</form></body></html>
sample6-1.php
<html><body>
<?php
$a=$_REQUEST['yen'];
$b=($a-120);
$c=($b%500);
$d=($c%100);
$e=($d%50);
$f=($e%10);
if($a==0){
print "お金を入れてください<br>\n";
}else if($a>1000){
print "1000円以内のお金を入れてください。<br>\n";
}else{
print "ありがとうございました.おつりは".$b."円です.<br><br>\n";
print "硬貨の枚数は次の通りです。<br>\n";
print "500円玉".$c."枚<br>\n";
print "100円玉".$d."枚<br>\n";
print "50円玉".$e."枚<br>\n";
print "10円玉".$f."枚<br>\n";}
?>
</body></html>
↓上の質問がメインなので出来ればで大丈夫です。m(_ _)m
私はまだphpの参考書の半分くらいまでしか勉強できていないのですが
実際にphpを普段使っている方からすると 私のプログラムはどんな感じですか?
無駄が多くて かなり変なものかと思うのですが 実際phpを使う人がこのプログラムを作ったら
どんな感じになりますか?
No.1ベストアンサー
- 回答日時:
% 演算子の意味を間違えています。
これは剰余演算子で、前の値を後ろの値で割った余りを返します。整数の範囲での割った値ではありません。72 % 50
で出てくるのは 1 ではなく 22 です。
自分も PHP の専門家ではないのでもっといい手があるかもしれませんが、$c, $d, $e, $f の計算部分は
$remain = $b;
$c=(int)($remain/500);
$remain -= $c * 500;
$d=(int)($remain/100);
$remain -= $d * 100;
$e=(int)($remain/50);
$remain -= $d * 50;
$f=(int)($remain/10);
とすれば想定通り動くのではないかと思います。
> 私のプログラムはどんな感じですか?
上記以外にいろいろ改善すべき点があると思います。
・マイナスの値を入れられたらどうする?
・非整数(小数点付きの数)を入れられたらどうする?
・商品を購入できない額を入れられたらどうする?
・10 円未満の端数はどうする?
・そもそも数値じゃない文字を入れられたらどうする?
また、上記ではあなたが使った変数名を変更しませんでしたが、ループカウンターや何らかの座標にたいしての $x や $y などの 1 文字で表すのが普通な場合を除いて、変数名に 1 文字だけのものや連番を付加したものは使いません。そんなことをしたら後になって訳が分からなくなるからです。
自分だったら、うーん……
$a -> $income
$b -> $change
$c -> $coin500yen
$d -> $coin100yen
$e -> $coin50yen
$f -> $coin10yen
とするかなぁ。
プログラムは想定どおりになりました。ためしにプログラムについて聞いてみたのですが、まだまだ
勉強不足みたいですね(;´Д`) とりあえず変数名を1文字にするのは辞めます。
勉強になりました。回答ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP ハイパーリンク
-
<A href ~で複数の値を渡したい
-
PHPのif文「POSTしていな...
-
POSTされたかどうか確かめる方...
-
Dosブロンプトでtabを出力したい
-
DTOとEntityの差は何ですか。
-
shシェルスクリプト 空白行の...
-
ps3で久しぶりにCDの音楽情報取...
-
【C#】DataGridViewの最大列数...
-
WordでExcelデータを差込...
-
php 入力画面から確認表示画面...
-
プリンタ用紙種類の取得
-
Yahoo! JAPAN IDを新規取得でき...
-
wordの差し込み印刷で文字...
-
syntax error, unexpected 'ech...
-
PHPの名前空間インポートについて
-
ファイル名に日付の挿入
-
ミュージックのアートワークを...
-
PHP正規表現の難題・preg_repla...
-
「取得先」という表現について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<A href ~で複数の値を渡したい
-
日付を基にした乱数生成
-
テーブルに送信ボタンをつける
-
「次の10件を表示する」のよ...
-
PHPでwait処理ってできます?
-
なぜエラーが出るのか分からな...
-
null代入とunset()の違いについて
-
PHPのif文「POSTしていな...
-
if (isset($_a)&&$_a)この意味は
-
microtime関数は、結構イイカゲ...
-
アクセスキーについて
-
POSTされたかどうか確かめる方...
-
複合演算子につきまして!
-
Luaにて、and or の組み合わせ...
-
$_SERVER["QUERY_STRING"]の仕...
-
PHPでのNULLの正規表現
-
PHPのGETパラメーターの検索値...
-
データ)表示件数について
-
SQLにあるデータをWEB画面に出...
-
vbYesNoの使い方
おすすめ情報