質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

4回答

12985閲覧

【C言語基礎】入力させた配列の要素から、偶数だけを全て取り出して出力したい

sokinawa4

総合スコア9

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/05/02 16:21

編集2020/05/03 03:13

前提・実現したいこと

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]); } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/05/02 16:32

> int array[5]; これはどのような意図で宣言されたのでしょうか。まったく使われていませんが。
sokinawa4

2020/05/02 21:07 編集

int array[4]の間違いです。
kazuma-s

2020/05/03 00:59

配列の添字は 0 から数えるので要素数が 5 なら最後は 4 だと思ったのでしょう。 int array[5]; これは array の宣言です。ここでは要素数を書きます。だから 5です。 式の中で array[i] を使うとき、i は 0~4 です。
sokinawa4

2020/05/03 02:14

またまた勘違いしておりました。要素数なので、int array[5]で正しいです。意図としてはおっしゃっていただいた通りです。
sokinawa4

2020/05/03 02:14

またまた勘違いしておりました。要素数なので、int array[5]で正しいです。意図としてはおっしゃっていただいた通りです。
dodox86

2020/05/03 02:17 編集

> 配列の添字は 0 から数えるので要素数が 5 なら最後は 4 だと思ったのでしょう。 なるほど、「int array[4]の間違いです。」の返信にずっと「???」でしたが、回答がついて閉じてしまったので問い直すのはやめていました。
sokinawa4

2020/05/03 02:23

失礼いたしました。「実現したいこと」に書いてある通り、要素数を5つ持つ配列なので、int array[5]が正しいです。
dodox86

2020/05/03 02:26

ここまで回答とコメント、注意点がついてもはや質問者さんご自身で解けそうな気もしますがどうでしょうか。
dodox86

2020/05/03 02:31

分からなければ、既にいただいた回答にコメントして問い合わせるなどしましょう。いただいた回答は質問者さんが最終的なコードをご自身で書けるよう、ヒントにとどめてくださっているものです。
sokinawa4

2020/05/03 02:36

今まで配列の問題がつまづいていなかったのですが、急にここで止まってしまっています。他のコメントにありました注意点(全て格納されている状態から偶数だけを表示すること、0も偶数であること)に注意しながら、もう一度やり直してますが、なかなかうまくいきません・・・
dodox86

2020/05/03 02:41

分からないままコードをこねくりまわすのではなく、C言語から離れて実際に自分の頭と手をつかってやったときに逐一、どのような操作をするかを考えます。それが出来たらコードに落とすだけですし、その時点でできなければコードも書けません。
sokinawa4

2020/05/03 03:08

いただいたコメントやヒントをもとに、コードを修正してみました。お時間ございましたら、ご査収頂けばと嬉しいです。
dodox86

2020/05/03 03:31

えーと。もしかしたら多数のコメントで遠慮されたのかもしれませんが。ご自身で確かめ、やりたいことができるようになったのであればそれで良いのではないでしょうか。 この場合、最終的なコードに至るアドバイスになったであろうepistemeさんの回答にBAを差し上げ、「こうなりました」と自己回答で最終結果のコードを投稿するのが適切かと思います。 (細かいことを書こうと思ったのですが、私自身は回答者ではないし、質問者さんは過去のご質問がいくつかあり、当サイトを使ったのは初めてではないようですので、やめました) ただ、どうでも良いのですが、仕事ではないのですから"ご査収"はいらないと思います。正直、読みづらい。。。
episteme

2020/05/03 03:39

「査収」とは「内容を確認して受け取る」こと。受け取る筋合いはないなぁ...
guest

回答4

0

ベストアンサー

for(int i = 0; i < 5; i++){ 入力値を array[i] に格納する } for(int i = 0; i < 5; i++){ array[i] が偶数ならプリントする }

投稿2020/05/02 16:40

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

偶数を出力する際の "," にも注意して作成してみました。

x.c

c

1#include <stdio.h> 2 3#define N (5) 4int main(void) { 5 int array[N]; 6 7 for (int i = 0; i < N; i++) { 8 printf("array[%d] => ", i); 9 scanf("%d", &array[i]); 10 } 11 12 // 偶数を抜き出す。偶数の個数も数える。 13 int evens[N]; 14 int count = 0; 15 for (int i = 0; i < N; i++) { 16 if (array[i] % 2 == 0) { 17 evens[count++] = array[i]; 18 } 19 } 20 // 偶数を出力する ( ',' で区切る、最後は改行する) 21 int last_pos = count - 1; 22 char ch = ','; 23 for (int i = 0; i < count; i++) { 24 if (i == last_pos) { 25 ch = '\n'; 26 } 27 printf("%d%c", evens[i], ch); 28 } 29 return 0; 30}

実行例:
イメージ説明

投稿2020/05/03 08:02

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sokinawa4

2020/05/03 08:09

細かいところまで、ありがとうございます!
guest

0

//訂正したコード
#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]); } }

}

投稿2020/05/03 05:41

sokinawa4

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

#include <stdio.h>

int main(void){

int array[5]; int num; for(int i = 0; i < 5; i++){ printf("array[%d] => ", i); scanf("%d", &num); if(num % 2 == 0){ array[i] = num; } } for(int z = 0; z < 5; z++){ if(array[z] != 0){ printf("%d\n",array[z]); } }

}

投稿2020/05/02 18:00

編集2020/05/02 18:22
yukineko_252

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2020/05/02 22:15

これだと 偶数だけを"格納" してるけど、いいんですか?
dodox86

2020/05/03 00:14

あと、array[5]は特に0などで初期化されていないので、ゴミが入っていたらprintf出力時にゴミも出力されてしまいますね。
episteme

2020/05/03 01:37

それもそうだし、"入力された0"は偶数なのにプリントされない。
Zuishin

2020/05/03 03:14 編集

入力されたのが奇数の場合、その要素は未初期化で放置されるというのもありますね。 追記 よく見ると dodox86 さんと同じことを言っていました。
sokinawa4

2020/05/03 03:09

いただいたコメントやヒントをもとに、コードを修正してみました。お時間ございましたら、ご査収頂けばと嬉しいです。
dodox86

2020/05/03 04:12

Zuishinさん。 > よく見ると dodox86 さんと同じことを言っていました。 いえいえ、コードの潜在的な問題をより再現しやすいご指摘だったと思います。
sokinawa4

2020/05/03 05:41

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問