• ベストアンサー

アドバイスください。

10個の1桁の整数を入力して、入力した順番に並べたいのですが 最後の出力のところで番地が表示されてしまいます。 どうしてでしょうか? #include<iostream> using namespace std; int main(void){ int a; int b[10]; for(int i=0; i<9; i++){ cin >> a; b[i]=a; } cout << b; return 0; }

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

  • ベストアンサー
  • BLK314
  • ベストアンサー率55% (84/152)
回答No.2

当然です。 cout << b としているからです・ bは10個の配列全体を表現する場合もありますが (ex sizeof (b) / sizeof (b[0]) == 10 です この場合bはb配列全体を表現しています。) 通常は”b配列の先頭要素が格納されている番地(アドレス)"と解釈します。 b配列全体を出力したいなら ループで回る必要があります。 他にも誤記があります。 for(int i=0; i<9; i++){ cin >> a; b[i]=a; } これではb[9]に値が入りません。 for(int i=0; i<10; i++){ ... } が正解と言いたいところですが... こういう風に書くとbを20個に拡張した時 バグの温床になってしまします for(int i=0; i< sizeof (b) / sizeof (b[0]); i++){ とすれば正解と言えるでしょう ちなみに これだとループの度に割り算して効率が悪いのでは? と思われるかもしれません。 心配ご無用です。 最近のC++は最適化がすごいので こんなコンパイル時に計算できるものはすべてコンパイル時に 計算してしまいます。 従って、実行時の効率は直接10を指定したものと変わりません。 ちなみに、 sizeof (b) / sizeof (b[0]) は、長いし、わかりにくい(でも一応定石ですが..)し、 絶対イヤ!!! という人には #define ARRAY_OF(a) (sizeof (a) / sizeof ((a)[0])) がお勧めです。 これなら for(int i=0; i< ARRAY_OF (b); i++){ でぐっと短縮されました。 これも効率は落ちませんのでご安心を。 で、ここまでくれば 最後のb配列も簡単に出力できます for (int i = 0; i < ARRAY_OF (b); i++) { cout << b[i]; } です。 以上をまとめます ======================ここから ソース =========================== #include<iostream> using namespace std; // 配列の要素数を計算します #define ARRAY_OF(a) (sizeof (a) / sizeof ((a)[0])) int main(void) { int b[10]; // 配列全体に値を入れます for (int i = 0; i < ARRAY_OF (b); ++i) { int a; // aはループの内部でしか利用しないので           // ループの外で宣言するのは全く意味がありません           // バグの温床となりやすいので変数のスコープは           // できるだけ狭くしましょう     cin >> a; a[i] = b; }     // 配列全体を出力します for (int i = 0; i < ARRAY_OF (b); ++i) {    cout << b[i];        } return 0; } ================ ソースはここまで ==============================

mutekisama
質問者

お礼

詳しい解説ありがとうございます。 またわからないことがあったらご指導お願いします。

その他の回答 (1)

  • Nereus
  • ベストアンサー率45% (17/37)
回答No.1

cout << b; この行がおかしいです。 C/C++言語の規則として、単独で現れた配列名は、その先頭要素の ポインタとなります。 ですから番地が表示されて当然なのです。 意図する動作は以下のように記述します。 for (int i = 0; i < 10; i++) {   cout << b[i]; } cout << endl; ※ちなみに、for文の条件判定式が間違ってますね。 配列の要素数が10なので、i < 10とするかi <= 9とします。

mutekisama
質問者

お礼

入力の部分がないんですけど・・・ そこはどうしたらいいんでしょうか?

関連するQ&A

  • 配列のプログラムですが

    #include <iostream> using namespace std; int main() { int a[100],b=-9999; int i=0,j; do { cout << "整数値を入力してください\n"; cin >> a[i]; b += a[i]; i++; }while( a[i-1] != 9999); cout << b << '\n'; for(j=0;j<i-1;j=j+1) cout << a[j] * 3 << '\n'; return 0; } このプログラムってどんな計算をしてるんですか?誰か分かる人いますか 整数値を入れてくださいって出るだけなんですが

  • 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++

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

  • どのようにすればいいですか?

    10個の1桁の整数を入力して、その中から最も大きい数字を3つを 入力した順番通り出力するにはどのようにすればいいですか? #include<iostream> using namespace std; int main(void){ int b[10]; int a; for(int i=0; i<10; i++){ cin >> a; b[i]=a; } int i, j, temp; for (i = 1; i < 10; i++) { temp = b[i]; for (j = i; j > 0 && b[j-1] > temp; j--) b[j] = b[j -1]; b[i] = temp; } for(int i=0; i<3;i++){ cout << b[9-i]; } return 0; }

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

    かなり初歩的なこととは思いますが、取り組み始めたばかりで悪戦苦闘しています。 大学からの課題なのですが、 (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++の条件分岐分からないんですが

    #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++ 整数値の各桁を足し合わせるプログラム

    上記の通りの質問です #include <iostream> using namespace std; int main () { int x; int sum = 0; cout << "正の整数値の各桁を足す。\n " ; do{ cout << "正の整数値:"; cin >> x; }while (x <= 0); cout << "足すと"; while (x > 0){ cout << sum += x % 10; x /= 10; return sum; } cout << "です。\n " ; } とまでは書けましたがうまくいきません。 初心者なので簡単かもしれませんがお願いします。

  • 改行文字について

    #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')の改行文字と等しいとは何のことを指すのでしょうか? よろしくお願いします。

  • 合計値を求める関数

    #include<iostream> using namespace std; //sum関数の定義 int sum(int x, int y) { return x + y;  } int main() { int num1, num2, ans; cout << "1番目の整数を入力して下さい。\n"; cin >> num1; cout << "2番目の整数値を入力して下さい。\n"; cin >> num2; ans = sum(num1, num2); cout << "合計は" << ans << "です。\n"; return 0; }  ここのreturn x+y;の所の合計値を戻り値として返す処理の仕組みを解りやすく教えて欲しいです、戻り値はちょっと解りづらいです、よろしくお願いします。

  • c++ 各桁の整数値を足すプログラム

    上記の通りの質問です #include <iostream> using namespace std; int main () { int x; int sum = 0; cout << "正の整数値の各桁を足す。\n " ; do{ cout << "正の整数値:"; cin >> x; }while (x <= 0); cout << "足すと"; while (x > 0){ cout << sum += x % 10; x /= 10; } return sum; cout << "です。\n " ; } とまでは書けましたがうまくいきません。 初心者なので簡単かもしれませんがお願いします。 また、sum += x% 10 と書いたときにオペラントと一致する演算子がないとでます。

専門家に質問してみよう