#include <stdio.h>
#define N 4
int main() {
int num1[N], num2[2*N-1], i;
for (i = 0; i < N; i++)
scanf("%d", &num1[i]); // 輸入 8 8 8 8
for (i = 0; i < N; i++) {
num2[2*i] = num1[i];
if (i < N-1) num2[2*i+1] = ' '; // 空格 ASCII 32
}
for (i = 0; i < 2*N-1; i++)
printf("%d", num2[i]); // 輸出 8 32 8 32 8 32 8
return 0;
}
現象:輸入四個數字(如 8888),期望輸出 8 8 8 8(數字間有空格),實際輸出 8328328328(空格被當作整數 32 打印)。且程序運行到輸入後無輸出(實為輸出緩衝區未刷新或格式錯誤導致視覺上無輸出)。
num2 定義為 int,存入字符 ' '(ASCII 32)後,printf("%d") 會按整數打印 32,而非空格字符。scanf("%d") 會讀取整個 8888 作為一個整數,而非四個 8。需用 %c 逐字符讀取,或輸入時加空格分隔。num1[4] 下標 1~4 訪問,C 語言數組下標從 0 開始,應為 0~3。#include <stdio.h>
#define N 4
int main() {
char num1[N], num2[2*N];
int i;
printf("請輸入 %d 個數字字符(如 8888):", N);
for (i = 0; i < N; i++) {
scanf(" %c", &num1[i]); // %c 前加空格跳過換行/空白
}
for (i = 0; i < N; i++) {
num2[2*i] = num1[i];
if (i < N-1) num2[2*i+1] = ' ';
}
num2[2*N-1] = '\0';
printf("結果:%s\n", num2); // 直接按字符串輸出
return 0;
}
輸入 8888 → 輸出 8 8 8 8。
#include <stdio.h>
#define N 4
int main() {
int num1[N], i;
printf("請輸入 %d 個整數(空格分隔):", N);
for (i = 0; i < N; i++)
scanf("%d", &num1[i]);
for (i = 0; i < N; i++) {
printf("%d", num1[i]);
if (i < N-1) printf(" "); // 直接打印空格字符
}
printf("\n");
return 0;
}
輸入 8 8 8 8 → 輸出 8 8 8 8。
scanf("%d") 讀取**整數**,會跳過空白字符,將連續數字視為一個整數。scanf("%c") 讀取**單個字符**(含空白),需在格式符前加空格 " %c" 跳過殘留換行符。printf("%d") 輸出**整數十進制**;printf("%c") 輸出**字符**;printf(" ") 直接輸出空格。'\0' 結尾可直接作字符串用 %s 輸出。根據需求選擇「字符處理」或「整數處理」路徑,統一輸入輸出格式符,即可輕松實現數字間插入空格。