在 iOS 開發的學習路徑中,C 語言是奠基石。第三天的課程重點圍繞變數命名規範、printf/scanf 格式化輸出入進階、資料型別轉換以及運算子與運算式展開。掌握這些基礎概念,對於後續學習 Objective-C 與 Swift 的底層機制至關重要。
良好的命名習慣能顯著提升程式碼可讀性與維護性。C 語言變數命名需遵循以下硬性規則:
int、for、while 等)業界常見命名慣例:
studentCount、userName(常用於區域變數、函數參數)student_count、user_name(常用於全域變數、常數)MAX_BUFFER_SIZE、DEFAULT_TIMEOUT建議:名稱要見名知意,避免使用 a、temp、data 等無意義名稱。
除了基本的 %d、%f、%c、%s,以下進階格式控制在實際開發中極為常用:
| 格式符 | 說明 | 範例輸出 |
|---|---|---|
%0md | 整數不足寬度 m 時,前面補 0 | printf("%05d", 42) → 00042 |
%.nf | 輸出浮點數,保留小數點後 n 位 | printf("%.2f", 3.14159) → 3.14 |
%.nlf | 針對 double 型別,保留 n 位小數 | printf("%.3lf", 2.71828) → 2.718 |
%g | 以最短輸出方式顯示浮點數(去除尾端多餘 0,最多保留 6 位有效數字) | printf("%g", 123.4500) → 123.45 |
C 語言支援隱式轉換(自動)與顯式轉換(強制型別轉換):
int → float → double)。(type_name),例如 (float)int_var、(int)double_val。注意陷阱:浮點數轉整數會直接截斷小數部分(非四捨五入),大整數轉小型別可能導致資料溢位截斷。
scanf("%d%f", &a, &b); // 以空白字元(空格、Tab、換行)分隔輸入
關鍵限制:
scanf("%d,%f", &a, &b)),輸入時必須完全符合該分隔符,空格與換行將不再被視為分隔符。char 型別極易導致輸入錯亂(因字元會讀取空白字元)。scanf 從標準輸入緩衝區讀取資料。若輸入不符合格式,錯誤資料會殘留在緩衝區,導致後續 scanf 直接讀取髒資料而不等待使用者輸入。常見清理手段:
while(getchar() != '\n'); —— 讀取並丟棄至換行符scanf("%*[^\n]%*c"); —— 讀取並丟棄整行(含換行符)fflush(stdin)(C 標準未定義行為,僅部分編譯器支援)經典三步驟(需暫存變數):
int temp = a;
a = b;
b = temp;
進階技巧(無需暫存變數,僅限整數):
a = a + b;
b = a - b;
a = a - b;
或使用 XOR 運算:
a ^= b;
b ^= a;
a ^= b;
C 語言算術運算子優先序(由高到低):
() 括號+ - 單目正負號* / % 乘除餘+ - 加減= += -= *= /= %= 賦值運算子(右結合性)複合賦值運算子(如 a += 5 等價於 a = a + 5)不僅簡潔,在某些情況下還能產生更高效的機器碼。
char 本質是 1 byte 整數(有號或無號視編譯器而定),儲存的是字元的 ASCII 碼值。因此可直接參與算術運算:
char c = 'A'; // ASCII 65
printf("%d", c + 1); // 輸出 66
printf("%c", c + 1); // 輸出 'B'
此特性常用於字元大小寫轉換('a' - 'A' == 32)、數字字元轉整數(c - '0')等場景。
小結:第三天的知識點看似基礎,實則是所有進階程式設計的基石。特別是輸入輸出緩衝區機制與型別轉換規則,若理解不透徹,極易在除錯時陷入「明明邏輯正確卻輸出錯誤」的迷霧中。建議多實作練習,體會緩衝區殘留資料對 scanf 連續呼叫的影響。