首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

《C和指針》第一章筆記:快速上手與 I/O 函數精華

     編輯:關於C語言

核心 I/O 函數速查表

函數功能參數/返回值典型用法
printf格式化輸出返回輸出字符數printf("%d %s", n, str);
scanf格式化輸入返回成功匹配項數scanf("%d", &n);
getchar讀取單字符返回 int (含 EOF)ch = getchar();
putchar輸出單字符返回輸出字符putchar('\n');
gets讀取一行(危險)返回字符串指針已棄用,勿用
puts輸出字符串+換行成功非負,失敗 EOFputs("Hello");

三個關鍵常量辨析

常量定義位置值/含義用途
NUL字符集標準字符 '\0' (ASCII 0)字符串結束標記
NULLstdio.h 等空指針常量 ((void*)0)指針初始化/判空
EOFstdio.h通常為 -1 (int)文件結束/錯誤標記

關鍵點:getchar() 返回 int 而非 char,為了容納 EOF(-1);字符串結束是 NUL('\0') 而非 NULL。

四大經典錯誤與避坑指南

1. scanf 缺 &
錯誤:`scanf("%d", n);`
正確:`scanf("%d", &n);`
數組名本身是地址,不需 &;標量變量必須取址
2. scanf 照搬 printf 格式串
錯誤:`scanf("%d\n", &n);`
正確:`scanf("%d", &n);`
scanf 格式串中空白字符匹配任意空白,\n 會導致等待非空白輸入
3. & 與 && 混淆
`&` 位元 AND / 取地址
`&&` 邏輯 AND (短路求值)
條件判斷務必用 &&
4. = 與 == 混淆
錯誤:`if (x = 5)` → 永真,賦值結果為 5
正確:`if (x == 5)`
習慣寫成 `if (5 == x)` 防誤賦值(編譯器會報錯)

六大編程提示(最佳實踐)

  1. 用 #include 避免重複聲明:頭文件放函數原型、常量定義、類型定義
  2. 用 #define 命名常量:`#define MAX 100` 替代魔術數字,便於維護
  3. 數組下標使用前檢查:防止越界訪問導致未定義行為
  4. 循環條件中蘊含賦值:
    
    // 冗餘版
    ch = getchar();
    while (ch != EOF && ch != '\n') {
        ch = getchar();
    }
    
    // 緊湊版(大牛風格)
    while ((ch = getchar()) != EOF && ch != '\n')
        ;  // 空循環體,分號不可省
  5. 空循環體寫法:`while (condition) ;` 分號單獨一行,避免誤吞下一語句
  6. 數組越界防護模式:
    
    // 讀入字符串到固定緩衝區
    int i = 0;
    while ((ch = getchar()) != EOF && ch != '\n') {
        if (i < MAX-1) buf[i++] = ch;  // 留位置給 \0
    }
    buf[i] = '\0';

實戰代碼範本


#include 
#define MAX_LINE 1024

int main() {
    char line[MAX_LINE];
    int ch, i = 0;
    
    // 安全讀取一行
    while ((ch = getchar()) != EOF && ch != '\n') {
        if (i < MAX_LINE - 1) line[i++] = ch;
    }
    line[i] = '\0';
    
    // 處理邏輯...
    printf("Read: %s\n", line);
    return 0;
}

總結

第一章雖名「快速上手」,實則奠定了 C 語言 I/O、常量、錯誤避免、編碼風格的基石。掌握 `getchar`/`putchar` 底層字符處理、理解 `scanf`/`printf` 格式串陷阱、養成「先檢查再使用」的防禦性編程習慣,是寫出健壯 C 代碼的關鍵。

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