

未完成ですが、コードを書きました

[code]

    #include<iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main(int argc, char** argv)
    {
        int n;
        cin>>n;
        for(int i=0;i<n;i++){
            for(int j=0;j<2*(n-1)+1;j++){
                cout<<(((j+1)<(i-1))?' ':(((n+i)>j)?' ':int(i+1)))<<endl;
            }
            cout<<endl;
        }
        return 0;
    }
    
[/code]

実行すると、

[code]

    3　//入力した値
    32
    32
    32
    1
    1
    
    32
    32
    32
    32
    2
    
    32
    32
    32
    32
    32
    
    Enterキーを押すと、ターミナルが終了します...
    
[/code]

予定では数字が１から入力した値まで上から下方向への三角形になる予定ですが、何故か、３２という数値が表示されます。課題なので答えは知りたくないですが、３２という数値がなぜ表示されるのか、正体がわかる方いらっしゃいませんか


CC BY-SA 3.0
2015-08-15T11:39:45.510
14443
2015-08-18T11:45:22.153
2015-08-16T02:31:33.403
2238
10933
question
c++
C++でスペースを出力したいところ、替わりに数字の32が出力される


BLUEPIXYさんとmossanさんがおっしゃっているのが主因です。  
ちなみに問題が把握できてないのですが、おそらくはこういうことでしょうか？

[code]

    #include <iostream>
    #include <sstream>
    using namespace std;
    
    namespace patch {
        // 整数を文字列に変換 (C++11ならto_string()が使える)
        string to_s(int i) {
            ostringstream os;
            os << i;
            return os.str();
        }
    }
    
    int main(int argc, char** argv)
    {
        int n;
        cout << "print number: ";
        cin >> n;
        for (/* 答えを知りたくないとのことで削除 */) {
            for (/* 答えを知りたくないとのことで削除 */) {
                cout << (
                    (/* 答えを知りたくないとのことで削除 */)
                    ? patch::to_s(i)
                    // C++11が使えるならto_string(i)が使える(ex. Visual Studio 2012以降)
                    : (/* 答えを知りたくないとのことで削除 */)
                        ? " "
                        : patch::to_s(i)
                );
            }
            cout << endl;
        }
        return 0;
    }
    
[/code]

明示的に自分で文字列に変換しないと、  
coutでint型だと推論してしまいますので32がでています。  
Visual Studio 2012以降をお使いでしたら、to_string()というのが使えて  
数値を文字列に変換することができます。

なお、実行結果は以下です。

[code]

    print number: 8
    1
    22
    3 3
    4  4
    5   5
    6    6
    7     7
    88888888
    続行するには何かキーを押してください . . .
    
[/code]


CC BY-SA 3.0
2015-08-15T18:37:17.500
14451
2015-08-15T18:51:46.253
2015-08-15T18:51:46.253
7744
7744
14443
answer


おそらく三項演算子 `A ? B : C` の動作を誤解されているのでしょう。

三項演算子 `A ? B : C` は値を返すわけですが、その値の型はいつでも同じでないといけません。つまり B と C
の型は同じでないといけないのです。もし違う場合は、コンパイラは一方の型がもう一方の型に変換可能かどうかチェックし、できるなら型変換を実行し、できなければエラーを返します。

今回のケースは `A ? (char型の値) : (int型の値)` ですので、ビット数の少ない `char` (`' '`) が `int`
に変換されます。つまり

  * `char ' '` (文字コード 32) が
  * `int` に変換され
  * `int 32` になり
  * `cout` で出力 

という流れです。


CC BY-SA 3.0
2015-08-16T03:59:56.397
14458
2015-08-16T05:30:14.157
2015-08-16T05:30:14.157
3605
3605
14443
answer


32が表示される原因はHidekiさんの回答の通りですので、この場合は条件式ではなくif文で書けば期待通りに`' '`が表示されます。

[code]

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main(int argc, char** argv)
    {
        int n;
        cin >> n;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 2 * (n - 1) + 1; j++) {
                if ((j + 1) < (i - 1)) {
                    cout << ' ';
                }
                else if ((n + i) > j) {
                    cout << ' ';
                }
                else {
                    cout << (i + 1);
                }
                cout << endl;
            }
            cout << endl;
        }
        return 0;
    }
    
[/code]

実行結果

[code]

    3　//入力した値
    
    
    
    1
    1
    
    
    
    
    
    2
    
    
    
    
    
    
    
    Enterキーを押すと、ターミナルが終了します...
    
[/code]


CC BY-SA 3.0
2015-08-18T11:45:22.153
14592
2015-08-18T11:45:22.153
7291
14443
answer