前提・実現したいこと
5つの要素をもつint型の配列を宣言して、ユーザー入力させた後、偶数だけを取り出して出力したい。
発生している問題・エラーメッセージ
コードを書いてみたものの、実現したい出力ができない。
書いたコードと、実現したい出力結果は以下の通り。
該当のソースコード
//実際に書いてみたコード #include <stdio.h> int main(void){ int array[5]; int num; int even; for(int i = 0; i < 5; i++){ printf("array[%d] => ", i); scanf("%d", &num); if(num % 2 == 0){ even = num; } } printf("%d\n", even); }
//上記のコードで出力した結果 array[0] => 12 array[1] => 13 array[2] => 14 array[3] => 15 array[4] => 16 16
//出力したい結果 array[0] => 12 array[1] => 13 array[2] => 14 array[3] => 15 array[4] => 16 12,14,16
試したこと
上記だと、"最後に入力した偶数の数値のみ"しか出力はできないことは把握しておりますが、
"入力した全ての偶数の数値"を取り出して表示する場合はどうすればいいのでしょうか?
具体的には以下のように表示させたいです。
補足情報
いただいたコメントより訂正してみました。
//訂正したコード #include <stdio.h> int main(void){ int array[5] = {0}; int num; int i = 0; // 入力値を array[i] に格納する for(; i < 5; i++){ printf("array[%d] => ", i); scanf("%d", &num); array[i] = num; } // (念の為)配列arrayの要素を確認 printf("array[0]の値は、%d\n", array[0]); printf("array[1]の値は、%d\n", array[1]); printf("array[2]の値は、%d\n", array[2]); printf("array[3]の値は、%d\n", array[3]); printf("array[4]の値は、%d\n", array[4]); // 偶数(0を含む)要素のみを表示 printf("偶数の要素は、"); for(i = 0; i < 5; i++){ if(array[i] % 2 == 0){ printf("%d,", array[i]); } } }
> int array[5];
これはどのような意図で宣言されたのでしょうか。まったく使われていませんが。
int array[4]の間違いです。
配列の添字は 0 から数えるので要素数が 5 なら最後は 4 だと思ったのでしょう。
int array[5]; これは array の宣言です。ここでは要素数を書きます。だから 5です。
式の中で array[i] を使うとき、i は 0~4 です。
またまた勘違いしておりました。要素数なので、int array[5]で正しいです。意図としてはおっしゃっていただいた通りです。
またまた勘違いしておりました。要素数なので、int array[5]で正しいです。意図としてはおっしゃっていただいた通りです。
> 配列の添字は 0 から数えるので要素数が 5 なら最後は 4 だと思ったのでしょう。
なるほど、「int array[4]の間違いです。」の返信にずっと「???」でしたが、回答がついて閉じてしまったので問い直すのはやめていました。
失礼いたしました。「実現したいこと」に書いてある通り、要素数を5つ持つ配列なので、int array[5]が正しいです。
ここまで回答とコメント、注意点がついてもはや質問者さんご自身で解けそうな気もしますがどうでしょうか。
分からなければ、既にいただいた回答にコメントして問い合わせるなどしましょう。いただいた回答は質問者さんが最終的なコードをご自身で書けるよう、ヒントにとどめてくださっているものです。
今まで配列の問題がつまづいていなかったのですが、急にここで止まってしまっています。他のコメントにありました注意点(全て格納されている状態から偶数だけを表示すること、0も偶数であること)に注意しながら、もう一度やり直してますが、なかなかうまくいきません・・・
分からないままコードをこねくりまわすのではなく、C言語から離れて実際に自分の頭と手をつかってやったときに逐一、どのような操作をするかを考えます。それが出来たらコードに落とすだけですし、その時点でできなければコードも書けません。
いただいたコメントやヒントをもとに、コードを修正してみました。お時間ございましたら、ご査収頂けばと嬉しいです。
えーと。もしかしたら多数のコメントで遠慮されたのかもしれませんが。ご自身で確かめ、やりたいことができるようになったのであればそれで良いのではないでしょうか。
この場合、最終的なコードに至るアドバイスになったであろうepistemeさんの回答にBAを差し上げ、「こうなりました」と自己回答で最終結果のコードを投稿するのが適切かと思います。
(細かいことを書こうと思ったのですが、私自身は回答者ではないし、質問者さんは過去のご質問がいくつかあり、当サイトを使ったのは初めてではないようですので、やめました)
ただ、どうでも良いのですが、仕事ではないのですから"ご査収"はいらないと思います。正直、読みづらい。。。
「査収」とは「内容を確認して受け取る」こと。受け取る筋合いはないなぁ...
回答4件
あなたの回答
tips
プレビュー