前提・実現したいこと
ここに質問の内容を詳しく書いてください。
C言語でプログラムを作っています。
1~100までの整数を奇数と偶数に分ける処理をしています。
発生している問題・エラーメッセージ
奇数は正しくカウントされるけれど、偶数が正しくカウントされません。
該当のソースコード
C言語
1#include<stdio.h> 2 3#define DATA_CNT 10 4 5void gu_ki_indct(int dt[], int cnt); 6void error_indct(int dt[], int cnt); 7 8int main(void) 9{ 10 11 int num=0; // 入力された数値を格納する変数 12 int gu_cnt=0; // 偶数の値の数をカウントする変数 13 int ki_cnt=0; // 奇数の値の数をカウントする変数 14 int error_cnt=0; // エラーの値の数をカウントする変数 15 int gusu[DATA_CNT]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // 偶数の値を格納する配列変数 16 int kisu[DATA_CNT]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // 奇数の値を格納する配列変数 17 int error[DATA_CNT]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // エラーの値を格納する配列変数 18 19 setbuf(stdout, NULL); 20 21 printf("数値を10個入力してください:"); 22 23 int i; 24 int ki; 25 int gu; 26 int er; 27 for(i=0; i<DATA_CNT; i++) 28 { 29 scanf("%d", &num); 30 if(0>num || num>=100) 31 { 32 error[er]=num; 33 error_cnt++; er++; 34 } 35 36 if(num % 2 == 0) 37 { 38 gusu[gu]=num; 39 gu_cnt++; gu++; 40 } 41 else 42 { 43 kisu[ki]=num; 44 ki_cnt++; ki++; 45 } 46 } 47 printf("奇数:\n"); 48 gu_ki_indct(kisu, ki_cnt); 49 50 printf("偶数:\n"); 51 gu_ki_indct(gusu, gu_cnt); 52 53 54 printf("奇数の数=%d\n", ki_cnt); 55 56 printf("偶数の数=%d\n", gu_cnt); 57 58 if(error_cnt!=0) 59 { 60 printf("エラー:\n"); 61 error_indct(error, error_cnt); 62 } 63 64} 65 66void gu_ki_indct(int dt[], int cnt) 67{ 68 int i=0; 69 while(i<cnt) 70 { 71 printf("%02d\n", dt[i]); 72 i++; 73 } 74} 75 76void error_indct(int dt[], int cnt) 77{ 78 int i=0; 79 while(i<cnt) 80 { 81 printf("%02d\n", dt[i]); 82 i++; 83 } 84} 85
ソースコードが途切れてます。
if(0>num || num>=100)でエラーとしてカウントした値も後続の偶数奇数判定にも流れてしまっています。
質問を編集して、コンパイルエラーがなく実行可能なソースコードにしてください。
実行結果の値も書いてください。
正しくカウントされずにどうなるのですか?
(エスパーするなら初期化忘れ)
>1~100までの整数を奇数と偶数に分ける処理をしています。
>if(0>num || num>=100)
0はエラーになっておらず、100はエラーになっています。
処理の問題はコメントで指摘済みですが…
「偶数が正しくカウントされません」を確認した入力値と結果を書いてください。
> (エスパーするなら初期化忘れ)
みたいですね。 ki, gu, er
これらを宣言時に、0設定する。だけか?