• ベストアンサー

2次元配列への値の代入

C言語の初心者です。 以下のようなプログラミングをしたいのですがどう組めばいいのでしょう。 2次元配列に値を代入する。 ただし条件が成立するときだけ。 そこで以下のようにプログラムを組みましたが、 どうも、うまくいきません #include<stdio.h> void main(){ int k,l,m; int ans[5][10]; l=0; for(k=0;k<5;k++){ if(k==4){ ans[k][l]=1; l++; printf("%d\n",ans[k][l]); } } } kはインクリしたいのですが、lは条件が成立するときだけインクリしなければならないのですが、 どうプログラミングすべきなのでしょうか?

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

  • ベストアンサー
  • Lchan0211
  • ベストアンサー率64% (239/371)
回答No.2

> ans[k][l]=1; > l++; > printf("%d\n",ans[k][l]); 仮にk=4,l=0だとすると、 ans[4][0]に1を代入してから、 ans[4][1]を表示していますから、 and[4][1]にはまだ何も代入されていなくて、 ゴミの値が表示されます。 とりあえず ans[k][l]=1; printf("%d\n",ans[k][l]); l++; で、1が表示されると思います。 (なんでここでprintfしたいのかわかりませんけど)

bonzomania
質問者

補足

ご丁寧にご回答いただき、ありがとうございました。 Printfの位置が悪かっただけなのですね。

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

その他の回答 (2)

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

> ans[k][l]=1; と > printf("%d\n",ans[k][l]); とで ans[k][l] は別の場所を指しています。(この間に l++があるのですから) 値が違っているのが当り前です。 そのループで実行されるのは ans[4][0]=1; l=1; printf("%d\n",ans[4][1]); の3つだけになります。 表示される値はans[4][1]のものですが、これが何になるかはわかりません。 > int ans[5][10]; と宣言したとき、配列の中身は初期化されないので、何が入っているのかわからないのです。 もっと具体的にやりたいことを示してください。 ans[0][0]からans[5][10]までのどこにどんな値を入れたいのですか?

bonzomania
質問者

補足

すいません。 printf の位置が悪かったのですね。 基本的な理解ができてませんでした。 ありがとうございました。

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

>どうも、うまくいきません どういう結果がほしいのに対して、 どういう風になるので うまくいかない、と判断されているのでしょうか?

bonzomania
質問者

補足

printfの出力結果が1ではなく、ランダムな大きな整数になります。 よろしくお願いいたします

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

関連するQ&A