• ベストアンサー

うるう年かどうかを計算するプログラミング

西暦何年かを入力し、その年がうるう年かそうでないかを 計算するプログラムを作っています。 #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つでてしまいます。 どこがちがうのでしょうか?

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

  • ベストアンサー
  • Shindo_
  • ベストアンサー率100% (1/1)
回答No.3

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; プログラムは慣れと経験ですんで頑張ってください。

chi-nao_chan
質問者

お礼

ありがとうございました。 プログラミングは難しいです・・・。 自主勉強します。

その他の回答 (3)

  • yotta
  • ベストアンサー率32% (26/79)
回答No.4

間違っている部分のみです else {cout<<toshi<<"年は非うるう年です。";}} else {cout<<toshi<<"年はうるう年です。";}} else {cout<<toshi<<"年は非うるう年です。";} に変えて再コンパイルして下さい

  • semujyu
  • ベストアンサー率12% (4/32)
回答No.2

軽く見たところ、ロジック以外は変なところはないと思われますが。 コンパイルエラーなのでしょうか? でしたら、どういった感じのエラーなのかや、エラーコードを乗せていただくとわかりやすいのですが? ちなみにロジックなのですが、4で割り切れて100で割り切れないときはうるう年なので、elseの2つ目が違う気が??

chi-nao_chan
質問者

お礼

coo(25) : error C2181: else 文が if と一致しません。 cpp(27) : error C2181: else 文が if と一致しません。 とでています。 どうでしょうか?

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

エラーの内容を書きましょう。 全角スペースを使っていたなんていう落ちのことだってありますから。 質問とは直接関係はないと思いますけれど、4で割れて100で割れない年は うるう年ですね。

chi-nao_chan
質問者

お礼

エラー内容。 else 文が if と一致しません。 が2つでています。 全角スペースは使っていませんでした・・・。 4で割れて、100で割れないようにすればいいのでしょうか?

関連するQ&A

  • あるプログラミングでdoubleの箱が

    こんにちは、 とあるプログラミングでdoubleの箱が突然2つでてきて混乱しています。 //読み込んだ実数値は10で割りきれるか #include <cmath> #include <iostream> Using namespace std; Int main() { Double x; Cout <<"実数値: "; cin >> x; If (double m = fmod(x, 10)) { Cout<<"その値は10で割りきれません。\n"; Cout<<"剰余は"<< m << d"です。"\n"; } else{ Cout"その値は10で割りきれます" \n"; } } とあり、なぜ突然double mがでてきたのでしょうか? すみません m(__)m

  • 改行文字について

    #include<iostream> using namespace std; int main(void) { char c; while (cin.get(c)) if (c == '\n') cout << "[RET]\n"; else cout << c; return(0); } これのif (c == '\n')の改行文字と等しいとは何のことを指すのでしょうか? よろしくお願いします。

  • javaプログラミング

    以下のプログラムがコンバイルできません なぜでしょうか? #include<iostream> #include<cmath> using namespace std; int main() { double a, b; cout << "実数 a の値を入力してください " << endl; cin >> a; cout << "実数 b の値を入力してください " << endl; cin >> b; cout << a << " の " << b << " 乗は " << pow(a, b) << "です" << endl; return 0; }

    • ベストアンサー
    • Java
  • ''C++の条件分岐分からないんですが

    #include<iostream> using namespace std; int main(){ int a; cout << "数値を入力してください\n"; cin >> a; if( a > 30) cout <<"31以上ですね\n"; } else if(a<10){ cout <<"10未満ですね\n"; } else { cout <<"30以下で10以上ですね\n"; } return 0; } これが例文なんですが、 変数aの値がbより小さい場合には、『aはbより小さいです』と表示させ、大きい場合には"a=a+b"を計算させる 文字変数mの中身が'a'ならば、『aが格納されています』と表示させて、'a'でないならば『'a'でない文字が格納されています』と表示させたあと、変数bとcを使った『b=b+c』を計算する。 変数aが、変数bより小さい場合には、『aはbより小さいです』と表示し、変数bより大きい場合には、『aはbより大きいです』と表示し、変数bと等しい場合には、『aとbは等しいです』と表示する #include<iostream> using namespace std; int main(){ int a; if(a < b) { __cout("aはbより小さいです\n"); } else { __c = a + b; }return 0; } #include<iostream> using namespace std; int main(){ int a; if(m == 'a') __cout("aが格納されています\n"); } else { __cout("\'a\'でない文字が格納されています\n"); } return 0; } #include<iostream> using namespace std; int main(){ int a; if(a < b) { __cout("aはbより小さいです\n"); } else if(a == b) { __cout("aとbは等しいです\n"); } else { __cout("aはbより大きいです\n"); } return 0; } これ合ってますか?あとプログラミング環境すらないので実行結果教えてもらっていいですか?

  • C++でうるう年判定のプログラムを作りたいのですが

    C++でうるう年判定のプログラムが作りたいのですが・・・ #include <iostream> using namespace std; int main() { return 0; } 問題のこの下の部分の内容が書けません 変数をa % 4という計算と%100と%400をしなければいけないことはわかっています。この式の入れ方がわかりませんif文だとは思っているのですが 表示は「<<a<<"はうるう年です";」と「<<a<<"はうるう年ではありません";」という判定を表示したいです。

  • C++

    C++で書いた下記のプログラムが、文字の入力が1023個までなら実行されますが、1024個を超えると実行されません。なぜだか分かる方、教えてください。 #include <iostream> #include <string> using namespace std; int main(void) { string Str; cin >> Str; cout << "here"; }

  • インライン関数の使い道と理屈

    #include <iostream> using namespace std; //max関数の定義 inline int max(int x, int y){if(x>y) return x; else return y;} int main(){ int num1, num2, ans; cout << "1番目の整数を入力して下さい。\n"; cin >> num1; cout <<"2番目の整数を入力して下さい。\n"; cin >> num2; ans = max(num1, num2); cout << "最大値は" << ans << "です。\n"; return 0; } インライン関数の処理は呼び出し部分に埋め込まれるので、プログラムの処理速度が 向上することがありますとあるんですが、 どのような時にインライン関数は使用するのでしょうか? 理由もしくみもご教示お願いします。

  • なんで繰り返すの?すいません急です汗

    macでソースプログラムを作っています。 #include <iostream> using namespace std; main(){ int i = 1 ; while (i < 1000) { cout << i ; if (i % 2 == 0){ cout << "go\n" ; } else { cout << "\n"; } i++; } } これだとなぜか1000までの数字が 1 2go 3 4go 5 6go と繰り返しででてきてしまいます。 本当は好きな数字を入力する状況になるようにして例えば「2」を入力したら 2go とだけ表示したいんです。 どこがまちがってるのでしょうか?

  • 他のファイルからの数値代入

    かなり初歩的なこととは思いますが、取り組み始めたばかりで悪戦苦闘しています。 大学からの課題なのですが、 (1) 数値の入力と演算、表示を行うプログラムを組む (2) (1)とは別のファイルに(1)の結果を使って(自動的に読み込む)   更に演算し結果をを表示するプログラムを組む それぞれの入力と演算に関しては… (1) #include <iostream> using namespace std; int main() { int a; cout << "数値入力:" ; cin >> a; a = a * 2; cout << "結果 = " << a << '\n'; return 0; } (2) #include <iostream> using namespace std; int main() { int b; b = a; cout << "結果 = " << b << '\n'; return 0; } このような感じをイメージしているのですが… (2)のファイルでaが定義されていないことになり上手く出来ません。 他のファイルでの演算結果を引用するには、どのようにすればいいのでしょうか? 使用しているのはVC++ 2005です。宜しくお願いします。

  • C++で二分法のプログラム

    C++で二分法のプログラムを作るんですが x1-x2が十分小さくなれば(10^-5)終了する 例 cos(x/2)の解を出す これどうやればいいんですか?whileを使うらしいですが。 文法というのは、 if系、while、switch、continue、for、break文くらいしかやってないんですが #include <iostream> #include <cmath> using namespace std; int main() { までは行きますが… 出力はcout 入力はcinでお願いできないでしょうか

専門家に質問してみよう