C++でスペースを出力したいところ、替わりに数字の32が出力される


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

[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]

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




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

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

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

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

という流れです。

