- ベストアンサー
元号判定:Perlでの元号判定方法とエラーハンドリングについて
- Perl初心者の方が、Perlを使用して「元号を判定する」方法について質問されています。質問者はif-elsif文を使用して試みましたが、うまく動作しないようです。また、明治以前の年号を入力した場合にエラーメッセージを表示する方法にもついて知りたいとのことです。
- 質問者は、年号を入力すると「明治(meizi)X年」と表示させたいと考えています。そのために、if-elsif文を使用し、年号に応じた表示を行っています。
- しかし、年号の範囲を条件式で指定する際に誤りがあるようです。また、同じ年号が重複して入力された場合に、例えば「meizi45nen/taisyou1nen」と表示させる方法についてもわからないとのことです。質問者はどこを修正すればよいのか、アドバイスを求めています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず「if文の書き方」を学び直すべし. あと, 9行目のエラーは「1行目にエラーが出ないこと」をふまえてじっくり見直すとわかるかもよ.
その他の回答 (3)
- kuroizell
- ベストアンサー率55% (95/170)
どんなエラーが出たか貼り付けないと、高確率で無視されますよ。 ダブルクリックで「起動」させているのなら、 コマンドプロンプトにドラッグ&ドロップして実行しないと エラーの確認も出来ませんけどね。 ちなみに原因はセミコロン抜けです。
- kmee
- ベストアンサー率55% (1857/3366)
※ 内容はチェックしていません。 起動しないのは、Perlの基本的な文法を間違えているからです。 syntax error at XXXXX.pl line LLL, near "print" だいたいこんなエラーじゃないですか? 「syntax error」 文法の間違いです。 「line LLL」と行数が出ています。 この行自体が問題とは限らないので、その周辺をよく見ましょう。 まずはエラーメッセージを読みましょう。 プロフェッショナルでも、プログラムの修正は、そこから始めます。
補足
補足(2) ありがとうございます。 エラーは syntax error at ファイル名 line8,near ") ; " Unrecognized character |xEF at ファイル名 line9 ※|xEFはバックスラッシュです。 以下に、自分なりに修正したものを補足させていただきます。
- Tacosan
- ベストアンサー率23% (3656/15482)
「そもそも起動してくれないです」とはどういうことでしょうか? 何かメッセージは出ませんでしたか?
補足
補足(3) ありがとうございます。 手直しをした上で、以下のような文章になりました。エラーは(2)の通りです。 なお、手直しをした箇所は、セミコロンの補足と、while文にて1900年以前を入力させないようにした点です。 while(1){ print ("seireki(1900~):"); $year=<stdin>; last if($year>=1900); } if($year<=1912 and $year>=1868); { $A=$year-1867; print("meizi $A nen \n:"); } elsif($year<=1926 and $year>=1912); { $B=$year-1911; print("taisyou $B nen \n:"); } elsif($year<=1989 and $year>=1926); { $C=$year-1925; print("syouwa $C nen \n:"); } elsif($year>=1989); { $D=$year-1988; print("heisei $D nen \n:"); }
補足
補足(1) セミコロン抜けのご指摘ありがとうございます。 それで少しは先に進みました。 ただ、それでもうまくいかなかったところがありましたので、(質問の中に補足はできないみたいなので)他の方の補足にて改良したものを入力いたしましたので、再度助言をいただけると嬉しいです。