2013-11-24 104 views
3

我寫了這個簡單的代碼,它給出了5個整數的輸入,說明它們是偶數還是奇數(我必須使用兩個數組)。但不管我寫什麼數字,輸出總是「5奇數」。我錯在哪裏?顯示給定數字是偶數還是奇數的程序

#include <stdio.h> 

int main(){ 

int numbers[5]; 
int even_odd[5]; 

printf("%s\n", "Insert 5 numbers."); 

int i; 
for(i=0; i<=4; i++){ 
    scanf("%d", &numbers[i]); 
    even_odd[i] = numbers[i] % 2; 
    } 

for(i=0; i<=4; i++);{ 
    if (even_odd[i] == 0){ 
     printf("%d%s\n", numbers[i], " even."); 
    }else{ 
     printf("%d%s\n", numbers[i], " odd."); 
     } 
    } 

return 0; 
} 

回答

2
for(i=0; i<=4; i++);-------> Your for loop never does what it should. 
{ 
    if (even_odd[i] == 0) { 
    printf("%d%s\n", numbers[i], " even."); 
    } else { 
    printf("%d%s\n", numbers[i], " odd."); 
    } 
} 

對於循環運行5次,最後i=5,所以其even_odd[5]正被檢查到零。

幸運的是你沒有崩潰。 C不檢查數組邊界,所以你編程運行。

3

爲(I = 0;我< = 4;我++); {

那裏有這不應該是有

爲(I = 0以分號;我< = 4; i ++){

這種方式

2

for(i=0; i<=4; i++);{

這是你的問題所在。
for循環語句後面有一個分號。

這意味着一個循環,幾次增加i
然後你有代碼運行塊:

{ 
    if (even_odd[i] == 0) { 
     printf("%d%s\n", numbers[i], " even."); 
    } else { 
     printf("%d%s\n", numbers[i], " odd."); 
    } 
} 
3

嘗試刪除分號

for(i=0; i<=4; i++){ 

所以,你的代碼將是這樣的:

for(i=0; i<=4; i++){ //Remove the semicolon here 
    if (even_odd[i] == 0){ 
     printf("%d%s\n", numbers[i], " even."); 
    }else{ 
     printf("%d%s\n", numbers[i], " odd."); 
     } 
    } 
1

的問題是多餘的;之間關閉){

for(i=0; i<=4; i++);{ 

刪除,它會正常工作。

原因:聲明

for(i=0; i<=4; i++); 

道僅有的循環,不執行代碼塊以下的。

之後,{和}之間的代碼塊被執行,但是然後i == 5,輸出將是未定義的。

0

一個基本的問題是這樣的LINE-

int i; 

變量應聲明後不printf statement.it會更好,如果你本身以前好多聲明。 scanf應始終是printf之後的下一條語句,其中涉及輸入。 那麼你已經把一個分號後的for循環declaration.It應該像這個 -

for(i=0;i<=4;i++) 

除了這些這兩個問題,將代碼工作alright.I已經檢查是完全獲得後援輸出。

+0

爲什麼我應該在printf之前聲明?爲什麼scanf應該放在printf之後? –

+0

在c中,聲明在開始時就已經完成了很多。 scanf用於接收任何輸入,所以無論何時printf被給予以接受來自鍵盤的輸入,都應該有一個scanf在它後面接受輸入。所以scanf總是跟在printf之後。代碼不能正常工作如果不是那樣。 –

相關問題