編寫函數 countdigit(number, digit) 統計整數 number 中數字 digit 的出現次數。原代碼邏輯錯誤導致無輸出,本文給出修正版並解析關鍵點。
int countdigit(int number, int digit) {
int d, n, count; // count 未初始化!
do {
n = number; // 每次循環重置 n,導致無限循環或邏輯錯誤
d = n % 10;
n = n / 10;
if (d == digit) count++;
} while (n != 0);
return count;
}
count 未初始化,值不確定。n = number; 導致每次都從原數字開始取模,無法逐位剝離。#include <stdio.h>
int countdigit(int number, int digit) {
int d, n, count = 0; // 初始化 count = 0
n = number; // 循環外賦值
while (n != 0) { // 用 while 更清晰
d = n % 10;
n = n / 10;
if (d == digit) count++;
}
return count;
}
int main(void) {
int x, t;
printf("Input an integer: ");
scanf("%d", &x); // 讀取用戶輸入
t = countdigit(x, 2);
printf("Number of digit 2: %d", t);
return 0;
}
count = 0 必須在使用前賦值。n = number 放在循環外部,循環內只做 n = n / 10,每次取最後一位(n % 10)後縮減 n。if (number < 0) number = -number;。scanf("%d", &x) 獲取輸入,而非寫死。Input an integer: 123212
Number of digit 2: 3
總結:初始化變量、循環邏輯正確剝離數位、正確讀取輸入,是解決此類統計問題的關鍵。