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

C 語言 scanf 輸入字符輸出 ASCII 碼:%c 格式符讀取單字符 vs %d 讀取整數

     編輯:程式設計綜合問答

錯誤代碼


int a;
scanf("%d", &a); // 期望輸入字符 '2' 得到 ASCII 50
printf("%d", a); // 輸出 2 (若輸入數字 2) 或隨機值 (若輸入字符)

問題分析

  • `%d` 期望匹配**十進制整數字符序列** (可選符號 + 數字)。輸入字符 `'a'` 時匹配失敗,**不消耗輸入**,`a` 保持未初始化值 (隨機/0)。
  • 輸入數字 `2` 時,`%d` 成功匹配整數 2,`a=2`,輸出 `2` (而非 ASCII 50)。

正確讀取字符 ASCII 碼


#include 
#include 

int main() {
    int a = 0;              // 初始化避免隨機值
    scanf("%c", &a);        // %c 讀取單個字符 (含空格/換行)
    // 或 scanf(" %c", &a); // 空格跳過前導空白字符
    printf("%d\n", a);      // 輸出 ASCII 碼
    system("pause");
    return 0;
}

格式符對比表

格式符讀取內容賦值類型示例輸入 → 結果
`%c`單個字符 (含空白)`char*` / `int*``a` → 97
`%d`十進制整數`int*``97` → 97
` %c`跳過空白後單字符`char*`` a` → 97
`%s`字符串 (至空白)`char*``abc` → "abc\0"

進階:讀取字符並轉換為整數值


char ch;
scanf(" %c", &ch);
int ascii = (int)ch; // 顯式轉換
printf("字符: %c, ASCII: %d\n", ch, ascii);

常見坑

  1. 緩衝區殘留換行符:`scanf("%d", &n); scanf("%c", &ch);` 第二次讀到 `\n`。解決:`scanf(" %c", &ch)` 或中間 `getchar()` 吸收。
  2. 未初始化變量:匹配失敗時值不確定,**聲明即初始化** (`int a = 0;`)。
  3. 字符與整數混淆:`'0'` (字符) ASCII 48,`0` (整數) 值 0。

核心:**`%c` 讀字符得 ASCII,`%d` 讀數字得數值**,格式符必須與輸入數據類型匹配。

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