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

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

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

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

3回答

4509閲覧

C言語で奇数と偶数の振り分けをするコードについて教えていただきたいです。

jump110

総合スコア10

C

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2021/04/16 05:31

編集2021/04/16 05:34
#include<stdio.h> #define COUNT 100 #define OD 1 #define EV 0 typedef struct number{ int odd[COUNT]; int even[COUNT]; }NUM; int main(void){ NUM result ; int flag = 1; int value; int on = 0, en = 0; int i = 0; int j; printf("奇数と偶数の判定を⾏います.\n"); printf("3 桁以下の整数を⼊⼒してください.(終了する場合は「0」を⼊⼒)\n"); while(flag != 0){ i++; scanf("%d", &value); printf("整数(%2d):%2d\n", i,value); if(value == 0){ flag = 0; printf("⼊⼒を終了します.\n"); }else{ if(value % 2 == OD){ result.odd[i] = value; }else if(value % 2 ==EV){ result.even[i] = value; } } } printf("\n"); printf("判定結果を⽰します.\n"); printf("奇数:"); for(j = 0; j < on; j++){printf("%5d", result.odd[j]);} printf("\n"); printf("偶数:"); for(j = 0; j < en; j++){printf("%5d", result.even[j]);} return 0; }

上のコードを実行すると以下のような結果になってしまいます。

奇数と偶数の判定を⾏います.
3 桁以下の整数を⼊⼒してください.(終了する場合は「0」を⼊⼒)
(ここでは1,2,0と入力したと仮定します。)
整数( 1): 1
整数( 2): 2
整数( 3): 0
⼊⼒を終了します.

判定結果を⽰します.
奇数:
偶数:


判定結果を
if(value % 2 == OD){
result.odd[i] = value;
}else if(value % 2 ==EV){
result.even[i] = value;
}
}
この部分で仕分けしようとしてるのですがうまく作動してないのだと思います。
間違っている点や改善点を教えていただきたいです。

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

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

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

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

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

guest

回答3

0

どのようにコードを書いているかわかりませんが、インデントや改行など適切に行なって読みやすいコードを心がけましょう。

具体的に i がどんな値になるか考えてほしいのですが、 ループの最初で i++; を行っているので、処理内部では 1,2,3,4,... となると思います。
この添字で配列に値を入れると、入力が 1 2 0 の場合はこうなります(データを表現しただけで、C言語のコードではありません)

result { odd: [\0, 1, ...] even: [\0, \0, 2, ...] }

加えて、 on, en は 0 で初期化されて一度も変わっていないので、 for ループは一度も実行されません。

for (j = 0; j < 0; j++) { ... }

投稿2021/04/16 06:30

mather

総合スコア6759

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

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

jump110

2021/04/16 07:01

回答ありがとうございます! on/enのほうは奇数偶数が振り分けられるたびに1ずつ増やしたいので if(value % 2 == OD){ result.odd[COUNT] = value; on++; }else if(value % 2 ==EV){ result.even[COUNT] = value; en++; }} このように書いてみたのですがどうでしょうか? 「i」のほうは考えてみてもわからなかったのでもう少し詳しく教えていただいてもよろしいですか? on/enを書いてみた状態で実行すると偶数奇数の結果を出力するところでおかしな数字が出てきてしまいました。
episteme

2021/04/16 13:09

#define COUNT 100 だから result.odd[COUNT] = value; は result.odd[100] = value; とおなじ。うまくいくわけがない。
guest

0

ベストアンサー

変数onとenは0のままですね

投稿2021/04/16 05:38

y_waiwai

総合スコア88042

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

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

jump110

2021/04/16 07:04

回答ありがとうございます! onとenを増やしてなかったのでforのところが作動してなかったんですね。 if(value % 2 == OD){ result.odd[COUNT] = value; on++; }else if(value % 2 ==EV){ result.even[COUNT] = value; en++; } } このような形で増やしてみようと考えたのですが奇数偶数の出力はできましたがうまく数字を仕分けできていませんでした。もう少し間違っているところの改善点を教えていただけると幸いです。
y_waiwai

2021/04/16 13:03

if(value % 2 == OD){ result.odd[on] = value; on++; }else { result.even[en] = value; en++; } でしょうねー
jump110

2021/04/16 13:18

うまく作動しました!ありがとうございます!!
guest

0

間違っている点や改善点を教えていただきたいです。

result.odd[i] == value;は、値の比較を行うだけで、result.odd[i]の値は変化しません。

投稿2021/04/16 05:33

maisumakun

総合スコア146018

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

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

jump110

2021/04/16 05:35

すみません、誤字でした。=をひとつ削除しても同じ状態となってしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問