• ベストアンサー

入力した数字の分を配列0~3に・・・

whileで無限ループを作ってscanfで値を入力していくのですが 入力を例えば 0 1 2 2 3(breakする) と入力した場合に その際に a[0] = 1;(0が1個入力されたので1) a[1] = 1; a[2] = 2; 整数で0より小さくて3より大きい場合は無限ループからbreakで脱出するようなプログラムを作りたいと思っているのですが for文でa[i]でやってカウントしていくのかな・・・?とは思っているのですが 中々うまくいきません 関数、ライブラリ等は使いません。 気になってどうしても手をつけてしまうのですが 1日以上悩んでもどうすべきかわかりません

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

>3(breakする) >3より大きい場合は無限ループからbreak 3を入力したときにbreakしたいのかしたくないのか、上記の内容からは判断がつきませんが… #include <stdio.h> int main(void) { int a[3] = { 0 }, n, i; do { printf("0~2の数値を入力(範囲外を入力すると終了)> "), scanf("%d", &n); a[n]++; } while (0 <= n && n <= 2); for (i = 0; i < 3; i++) { printf("%d:%d個\n", i, a[i]); } return 0; } 適当に改変してください。

izupawapuro
質問者

お礼

行数指定はなかったみたいです! ありがとうございました

izupawapuro
質問者

補足

友達の課題で/* */の5行でa[0~2]までのを入力した値のときにカウントしていく流れだと思うのですが・・・ しばらくしたら友達に「/*の範囲って5行に決まってるの?それとも自由?」と聞いてみます 確かにif分さえあれば for(i=0;i<=2;i++){ a[i]=0; } と初期化し if(a[0]==t) a[0]=a[0]+1; などができますよね もちろん初期化も大事ですが。 ちょっと情報不足ですみません、もう少しお時間をください

その他の回答 (4)

  • unacyo
  • ベストアンサー率51% (35/68)
回答No.5

#4です。すいません、参照元間違えました。 #1→#3です。

  • unacyo
  • ベストアンサー率51% (35/68)
回答No.4

#1さんのコードをちょいと修正。 scanfの次の行に、入力値チェックを追加。 if( (n < 0) || (2 < n)) break; 入力値を使う場合は、必ず先に範囲チェックを行ってください。 while()でチェックする意味が無くなるので、while(1);にでもすれば動きます。

izupawapuro
質問者

お礼

勉強になりました。ありがとうございます

izupawapuro
質問者

補足

後無限ループで補足を。 while(1)で無限が作られています。これは講師の指示です。 その中で上記のようなプログラムを組むということです。 たひだひ失礼します

  • honor
  • ベストアンサー率35% (25/71)
回答No.2

カウントする入力が0~3の4つだけならifやswitchでも使って 入力が0ならa[0]を+1する 入力が1ならa[1]を+1する 入力が2ならa[2]を+1する 入力が3ならa[3]を+1する それ以外ならbreak のように全部書いてしまう方法もありますが。

izupawapuro
質問者

お礼

そのような方法で書けるみたいでした。 解答ありがとうございます!

izupawapuro
質問者

補足

No.3様と同様に現在聞くようにしています。 もう少しお待ちください

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

scanf使ってる時点で「関数、ライブラリ等は使いません」に反するんですが、それは置いといて。 > a[0] = 1;(0が1個入力されたので1) と入力された0,1,2,の数を数えて、配列a[0],a[1],a[2]に入れる、というのが作りたいもの、ということでよろしいでしょうか? ※ 例の場合、「連続している個数」とも解釈できます。その場合まったくプログラムが変わります。 例えば、入力が1だったとして、 それまでの入力に1が1つもなければa[1]=0になっているはずで、それをa[1]=1にします それまでの入力に1が1つならa[1]=1になっているはずで、それをa[1]=2にします それまでの入力に1が2つならa[1]=2になっているはずで、それをa[1]=3にします 例えば、入力が2だったとして、 それまでの入力に2が10個ならa[2]=10になっているはずで、それをa[2]=11にします それまでの入力に2が324個ならa[2]=324になっているはずで、それをa[2]=325にします なんか法則に気付きませんか? > 整数で0より小さくて3より大きい場合 「0より小さくて3より大きい」整数は存在しません。 「0より小さいか、3より大きい」整数なら存在するし、「無限ループからbreakで脱出する」という条件に対して妥当と思われます。

izupawapuro
質問者

お礼

あ a[2]=325も+1ですね すみません

izupawapuro
質問者

補足

n[i++] = t++; などは考えたのですが・・・ >それまでの入力に2が10個ならa[2]=10になっているはずで、それをa[2]=11にします それまでの入力に2が324個ならa[2]=324になっているはずで、それをa[2]=325にします ということはa[2]=10だとa[2]=cnt + 1でしょうか? さらにa[2]=325にするとa[2]=cnt -1という形でしょうか?

関連するQ&A

専門家に質問してみよう