2017-07-29 26 views
3

我正在製作一個程序來從數組中分離偶數和奇數的整數。我給了偶數和奇數數組3個元素,但是當沒有3個偶數/奇數時,它會打印出一些隨機數。有什麼方法可以定義要打印的內容。這裏是代碼,如果需要:如何顯示比數組中更少的元素

P.S.我發現問題的解決方案,但它有不同的方法,所以我只想知道我可以這樣做,如果沒有,爲什麼?謝謝!

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <string.h> 
#include <math.h> 
#include <time.h> 

int main() 
{ 
    int nubmers[3]; 
    int even[3]; 
    int odd[3]; 

    for(int i = 0; i < 3; i++) 
    { 
     printf("Enter %d element : ", i); 
     scanf(" %d", &numbers[i]); 

     if(numbers[0]%2 == 0) 
     { 
      even[0] = numbers[0]; 
     } 
     else 
     { 
      odd[0] = numbers[0]; 
     } 

     if(nubmers[1]%2 == 0) 
     { 
      even[1] = numbers[1]; 
     } 
     else 
     { 
      odd[1] = numbers[1]; 
     } 

     if(numbers[2]%2 == 0) 
     { 
      even[2] = numbers[2]; 
     } 
     else 
     { 
      odd[2] = numbers[2]; 
     } 
    } 

    printf("Even : %d\n", even[i]); 
    printf("Odd : %d\n", odd[i]); 

    return 0; 
} 
+2

這就是你現在如何使用循環。提示:你正在填充「偶數」和「奇數」三次而不是一次。 – CinCout

+0

是的,我糾正了代碼中的問題,但沒有問題,謝謝 –

+0

@CinCout對不起,我不完全理解你的評論我需要做什麼使一個如果聲明與偶和奇怪或 –

回答

2

在循環中,你應該使用循環計數變量i,而不是固定的指數012

此外,你應該統計偶數和奇數值的數量。

最後,您可以打印一個偶數值列表和一個奇數值列表。

int main() 
{ 
    int nubmers[3]; 
    int even[3]; 
    int odd[3]; 
    int noEven = 0, noOdd = 0; 

    for(int i = 0; i < 3; i++) 
    { 
     printf("Enter %d element : ", i); 
     scanf(" %d", &numbers[i]); 

     if (numbers[i]%2 == 0) 
      even[noEven++] = numbers[i]; 
     else 
      odd[noOdd++] = numbers[i]; 
    } 

    for(int i = 0; i < noEven; i++) 
     printf("Even : %d\n", even[i]); 
    for(int i = 0; i < noOdd; i++) 
     printf("Odd : %d\n", odd[i]); 

    return 0; 
} 
+1

尼斯。爲什麼不通過將偶數/奇數計數器和相關數組分別包裝到一個'struct'中,使它更好呢? ;) – alk

1

如何顯示更少的元件相比,還有在陣列

定義任何「不可使用中」值和初始化與此陣列。

「未使用」值應該是您確定知道在程序運行期間不需要/不使用的任何值。

在你的情況下,你可以例如採取最小的int可能,其定義爲INT_MIN

#include <stdio.h> 
#include <limits.h> /* for INT_MIN */ 

#define NOT_IN_USE INT_MIN 


int main(void) 
{ 
    ... 

    for (size_t i = 0; i < 3;: ++i) 
    { 
    numbers[i] = NOT_IN_USE; 
    even[i] = NOT_IN_USE; 
    odd[i] = NOT_IN_USE; 
    } 

確保「不收使用中」價值絕對不使用:

/* core program code here */ 
for(int i = 0; i < 3; i++) 
{ 
    printf("Enter %d element : ", i); 
    scanf(" %d", &numbers[i]); 
    if (NOT_IN_USE == numbers[i]) 
    { 
    printf("Invalid input. Try again.\n"); 
    --i; 
    continue; 
    } 

如果您後來又想只檢查就已採用這些元素/只環摸了個該數組將跳過與「未使用」值相等的所有元素。

/* Show results */ 
    for (size_t i = 0; i < 3;: ++i) 
    { 
    if (NOT_IN_USE != numbers[i]) 
    { 
     printf("number[%zu] = %d\n", i, number[i]); 
    } 

    if (NOT_IN_USE != even[i]) 
    { 
     printf("even[%zu] = %d\n", i, even[i]); 
    } 

    if (NOT_IN_USE != odd[i]) 
    { 
     printf("odd[%zu] = %d\n", i, odd[i]); 
    } 
    } 
} 
+0

出於好奇,爲什麼你用'<='來表示'!='? –

+1

Wuah ... - 最近做了太多的Pascal ... - 修正:} – alk

+0

@ Jean-FrançoisFabre:說實話,這不是Pascal,而是VBA ...;} – alk