• ベストアンサー

c++の2バイト文字表示について

今、"□"を使って壁を表示するプログラムを作っています。 for文で壁を表示したい場所に1を入れ、その他に0を入れ、次のfor文で1のときは表示というプログラムを作ってみると、エラーが出たり"□"の位置がずれていたり、何も表示されなかったりします。 int型の変数だから4バイト分確保されているので大丈夫だと思ったのですが、原因がわかりません。 何がいけないのでしょうか。初心者なのでわかりやすく教えてください((+_+))m

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

  • ベストアンサー
  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.2

>for(i=0;i<10;i++){ > for(j=0;j<10;j++){ >  if(n[i][j]==1){ >   printf("□"); >  } > } >} このプログラムは配列 n[][] の要素に 1が出現した回数だけ"□"を出力します。 1が1回出現したなら □ 1が100回出現したなら □□□□□□□□□□□□□□□□□□~省略 合計100個~□□□□□□□□ ですね。 > int i,j,n[10][10]={1}; ここで n[0][0] だけを 1 にして、残りの全ての要素は0にしているので、 1が1回だけ出現、結局 "□" が1つだけ出力されます。 プログラムはちゃんとあなたが書いたとおりに動いていませんか?

noname#193530
質問者

お礼

回答ありがとうございます! なるほど、n[0][0]だけに1が入るんですね!それが原因かもしれません。 プログラムは思うように動いてくれません~_~; 試してみます。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

例えば、これだと n[0][0]にだけ1が入る。 他は0が入る ※ C言語の初期化の仕様。配列等の大きさ、構造体のメンバーに足りない分は0になる。 → 1個だけ□が出力される。 n[i][j] == 0のときには何も出力されない。 もし、n[10][10]全てに1を代入したとしても 100個□が並ぶ。 出力装置によって、横スクロールが必要だったり、画面端で中断されたり、折り返したりする。 となります。 ただ、これだけでは、エラーにはなりません。 ※ この外側にあると思われるmain関数の書き方が間違ってなければ。 それと、やはり「intが4バイト」云々は関係ありません。(そもそも、intは4バイトとは決まっていません

noname#193530
質問者

お礼

回答ありがとうございます^ ^ n[0][0]にしか1が入らないんですよね…。 ずっとintは4バイトだと思って過ごしていました。 繰り返しに改行を入れて綺麗に表示することができました(^^;;

すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

プログラムをみないことには、まったくわかりません。 □とintに関連があるように思えません。 なにか、根本的な思い違いをしているように思います。

noname#193530
質問者

お礼

回答ありがとうございます(^O^)

noname#193530
質問者

補足

説明不足ですみません・・全て"□"にするならこんなかんじです↓ int i,j,n[10][10]={1}; for(i=0;i<10;i++){ for(j=0;j<10;j++){ if(n[i][j]==1){ printf("□"); } } }

すると、全ての回答が全文表示されます。

関連するQ&A