- ベストアンサー
うるう年かどうかを計算するプログラミング
西暦何年かを入力し、その年がうるう年かそうでないかを 計算するプログラムを作っています。 #include <iostream> using namespace std; int main() { int toshi; cout <<"西暦を入力してください"; cin>>toshi; if (toshi%4==0) {if (toshi%100==0) {if (toshi%400==0) {cout<<toshi<<"年はうるう年です。";} else {cout<<toshi<<"年は非うるう年です。";} else {cout<<toshi<<"年は非うるう年です。";} else {cout<<toshi<<"年は非うるう年です。";}}} return EXIT_SUCCESS; } これを入力したのですが エラーが2つでてしまいます。 どこがちがうのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
else文の対応の問題ですね。 上記のプログラムだと、全部のelseが三番目のif文に対応するelseになっちゃってます。 正解のソースはこちら int toshi; cout <<"西暦を入力してください"; cin>>toshi; if (toshi%4==0){ if (toshi%100==0){ if (toshi%400==0){ cout<<toshi<<"年はうるう年です。"; }else{ cout<<toshi<<"年は非うるう年です。"; } }else{ cout<<toshi<<"年は非うるう年です。"; } }else{ cout<<toshi<<"年は非うるう年です。"; } cin >> toshi; return EXIT_SUCCESS; 上記のソースをよく見てくださいね。「{」の数が違うと思います。 ただ、三個もif文が重なるのは間違いの元なので、下のようにしたほうがすっきりすると思いますよ。 int toshi; cout <<"西暦を入力してください"; cin>>toshi; if (((toshi%4==0) && (toshi%100!=0)) || ((toshi%4==0) && (toshi%400==0))){ cout<<toshi<<"年はうるう年です。"; }else{ cout<<toshi<<"年は非うるう年です。"; } cin >> toshi; return EXIT_SUCCESS; プログラムは慣れと経験ですんで頑張ってください。
その他の回答 (3)
- yotta
- ベストアンサー率32% (26/79)
間違っている部分のみです else {cout<<toshi<<"年は非うるう年です。";}} else {cout<<toshi<<"年はうるう年です。";}} else {cout<<toshi<<"年は非うるう年です。";} に変えて再コンパイルして下さい
- semujyu
- ベストアンサー率12% (4/32)
軽く見たところ、ロジック以外は変なところはないと思われますが。 コンパイルエラーなのでしょうか? でしたら、どういった感じのエラーなのかや、エラーコードを乗せていただくとわかりやすいのですが? ちなみにロジックなのですが、4で割り切れて100で割り切れないときはうるう年なので、elseの2つ目が違う気が??
お礼
coo(25) : error C2181: else 文が if と一致しません。 cpp(27) : error C2181: else 文が if と一致しません。 とでています。 どうでしょうか?
- ranx
- ベストアンサー率24% (357/1463)
エラーの内容を書きましょう。 全角スペースを使っていたなんていう落ちのことだってありますから。 質問とは直接関係はないと思いますけれど、4で割れて100で割れない年は うるう年ですね。
お礼
エラー内容。 else 文が if と一致しません。 が2つでています。 全角スペースは使っていませんでした・・・。 4で割れて、100で割れないようにすればいいのでしょうか?
お礼
ありがとうございました。 プログラミングは難しいです・・・。 自主勉強します。