• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:今、C言語の勉強をしていて、「西暦と月をscanfで入力し、”西暦●●)

C言語で西暦と月を入力し、日を表示するプログラムの作成方法

このQ&Aのポイント
  • C言語で西暦と月をscanfで入力し、指定した形式で日を表示するプログラムを作成する方法について説明します。
  • 条件に従って西暦と月の値を入力し、その値を元に日を計算し表示するプログラムの開発に取り組んでいます。
  • 作成したプログラムがコンパイルエラーを発生させているため、プログラムの構文をチェックして修正する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

else if(m==2 && y%4==0 && y%100>0 || y%400==0) d=29; printf("西暦%d年の%d月は%d日です。",y,m,d); else d=29; ここですよね。 {}をつけない場合、if文は次の一行のみに効果を発揮します。 つまり、printfの一行はもうifの範囲を出ています。 ifの効果を発揮させたい範囲を{}で囲んでください。 また、こういった間違いを防ぐためにもif文を使う場合は極力{}を使うようにした方が良いと思います。

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

>「予約語elseは使用できません」と文法エラーがでました。 というエラーが出るのは、if文とelse句の勢力範囲を適切に書いていないからです。 if (何とか) { // 何かの文 } else { // 何かの文 } という風に、「何かの文」がたとえ1個だけの場合でも { と } で必ず囲む方がよいでしょう。 >西暦が0以下のとき、月が1以下12以上の場合 西暦が0以下のとき と 月が1以下12以上の場合 の間に入るのは「または」で間違いないのですね? それにしたところで、 西暦が0以下のとき と y<0 とは食い違っています。 また、 月が1以下12以上の場合 と d>1 && d<12 とも食い違っています。 そもそも、 月が1以下12以上の場合 がエラーであるとすると、1月や12月という正しい月までもが エラーとみなされてしまいます。それでよいのでしょうか。 さらに、 d=29; と else d=29; だと、平年の2月の日数を正しく求めていませんね。 さらにさらに、 printf("西暦%d年の%d月は%d日です。",y,m,d); という同じ文が4回も登場する必要はありません。 最後の一度だけで十分なはずです。

関連するQ&A