首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言數字間插入空格:scanf 格式符陷阱與正確輸出方法

     編輯:程式設計綜合問答

問題代碼

#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 打印)。且程序運行到輸入後無輸出(實為輸出緩衝區未刷新或格式錯誤導致視覺上無輸出)。

根因分析

  1. 數組類型不匹配:num2 定義為 int,存入字符 ' '(ASCII 32)後,printf("%d") 會按整數打印 32,而非空格字符。
  2. 輸入格式符錯誤:若輸入為連續數字字符串「8888」,scanf("%d") 會讀取整個 8888 作為一個整數,而非四個 8。需用 %c 逐字符讀取,或輸入時加空格分隔。
  3. 數組下標越界風險:原代碼 num1[4] 下標 1~4 訪問,C 語言數組下標從 0 開始,應為 0~3。

修正方案一:字符數組 + %c 輸入 + %c 輸出

#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 輸出。
  • 數組下標從 0 開始,長度 N 的合法下標 0 ~ N-1。

根據需求選擇「字符處理」或「整數處理」路徑,統一輸入輸出格式符,即可輕松實現數字間插入空格。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved