程序要求輸入一個最多 5 位數的整數,輸出位數及各位數字。僅當輸入恰好 5 位數時正常,其他位數輸出亂碼。
代碼中使用固定大小數組存儲各位數字,但未初始化數組元素。當輸入位數 < 5 時,高位數組元素保留隨機堆棧值(亂碼),輸出時被一同打印。
int c = 0, c1[5]; // c1 未初始化!
// ... 計算位數過程中 c 可能 < 5
// 輸出循環固定遍歷 5 次:
for (int i = 0; i < 5; i++) {
printf("%d", c1[i]); // 高位輸出未初始化的垃圾值
}
int c1[5] = {0}; // 全部初始化為 0
#include <stdio.h>
int main() {
long long num; // 支持更大範圍
int digits[20] = {0}; // 足夠大並初始化
int count = 0;
printf("請輸入一個整數(最多 5 位):");
scanf("%lld", &num);
if (num == 0) {
printf("位數:1\n各位數字:0\n");
return 0;
}
// 處理負數
if (num < 0) {
printf("負號:-\n");
num = -num;
}
// 分解各位(逆序存儲)
while (num > 0) {
digits[count++] = num % 10;
num /= 10;
}
// 輸出結果
printf("位數:%d\n各位數字:", count);
for (int i = count - 1; i >= 0; i--) { // 逆序輸出正確順序
printf("%d ", digits[i]);
}
printf("\n");
return 0;
}
count 記錄實際位數,輸出時只遍歷有效範圍。long long 避免溢出,數組大小預留充足(如 20)。void printDigits(long long n) {
if (n < 0) { putchar('-'); n = -n; }
if (n >= 10) printDigits(n / 10);
putchar('0' + n % 10);
putchar(' ');
}
亂碼根源是未初始化數組元素被誤輸出。解決核心在於初始化數組與動態控制輸出範圍,推薦使用計數器記錄實際位數的通用解法。