2017-09-05 65 views
-3

我正在寫一個C程序來計算用戶輸入的奇數位數。程序C計數奇數位總數

例如,

請輸入號碼:12345個

countOddDigits():3

int countOddDigits(int num); 
int main() 
{ 
    int number; 
    printf("Please enter the number: \n"); 
    scanf("%d", &number); 
    printf("countOddDigits(): %d\n", countOddDigits(number)); 
    return 0; 
} 
int countOddDigits(int num) 
{ 
    int result = 0, n; 
    while(num != 0){ 
     n = num % 10; 
     if(n % 2 != 0){ 
      result++; 
     } 
     n /= 10; 
    } 
    return result; 
} 

的代碼是行不通的。 有人能告訴我它出錯了嗎?

+1

運行時會發生什麼?請[閱讀關於如何提出好問題](http://stackoverflow.com/help/how-to-ask)。另請Eric Lippert提供[如何調試小程序](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/),並學習如何使用調試器。 –

+2

'n/= 10;'==>'num/= 10;' – WhozCraig

+0

擺脫'n'並簡單地使用'num'來代替。這不像你需要'num'來保持函數結尾的不變,它只會產生混淆。 –

回答

1

你的代碼有一些錯誤。這裏是你的代碼的工作版本:

#include <stdio.h> 

int countOddDigits(int n); 
int main() 
{ 
    int number; 
    printf("Please enter the number: \n"); 
    scanf("%d", &number); 
    printf("countOddDigits(): %d\n", countOddDigits(number)); 
    return 0; 
} 

int countOddDigits(int n) 
{ 
    int result = 0; 
    while(n != 0){ 
     if(n % 2 != 0) 
      result++; 
     n /= 10; 
    } 
    return result; 
} 
  1. 你混合nnum在一起 - 有沒有需要兩個變量。
  2. n%=10只是造成錯誤 - 你需要檢查最後一位數字if(n%2!=0),然後移動到下一個n/=10,就是這樣。
+0

謝謝!如果我想使用void函數呢? – BEX

+0

那麼,你必須以某種方式從函數中獲得'result'值。你可以使用輸出參數而不是返回它。 – curusarn

+0

@BEX下面是一個例子:https://stackoverflow.com/questions/42403940/c-input-and-out-parameters-of-a-function – curusarn

1

循環變量不正確。你外環是

while (num !=0)

NUM變量從未遞減;最後的聲明遞減n變量。我的猜測是你想初始化

int n = num; 
while (n != 0) 
{ ... 
    n/= 10; 
}