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

C語言基礎知識綜合案例:轉義字符、printf 控制、scanf 輸入、puts 對比、循環菜單

     編輯:關於C語言

本文通過三個遞進式案例,串聯 C 語言最基礎的 I/O、格式化、控制流知識點:轉義字符表、printf 格式化完整演示、scanf 安全輸入、puts vs printf 對比、交互式菜單循環。

案例一:轉義字符與 printf 格式化大秀

#include <stdio.h>
#include <stdlib.h>

int main() {
    // 1. 基本轉義字符演示
    printf("響鈴: \a\n");
    printf("退格: 123\b4\n");      // 顯示 124
    printf("換頁: \f\n");
    printf("回車: 行尾內容\r開頭覆蓋\n");
    printf("水平制表: A\tB\tC\n");
    printf("垂直制表: A\vB\vC\n");
    printf("反斜槓: \\\n");
    printf("問號: \?\n");
    printf("單引號: \'\n");
    printf("雙引號: \"\n");
    
    // 2. 格式化輸出完整表
    int num = 42;
    float pi = 3.14159f;
    char *str = "Hello";
    char ch = 'Z';
    
    printf("%%d 十進制: %d\n", num);
    printf("%%x 十六進制: %x\n", num);
    printf("%%o 八進制: %o\n", num);
    printf("%%f 浮點: %f\n", pi);
    printf("%%.2f 保留兩位: %.2f\n", pi);
    printf("%%e 科學記數法: %e\n", pi);
    printf("%%s 字符串: %s\n", str);
    printf("%%c 字符: %c\n", ch);
    printf("%%p 指針: %p\n", (void*)&num);
    
    // 3. 寬度與精度控制
    printf("%%10d 右對齊寬度10: %10d\n", num);
    printf("%%-10d 左對齊: %-10d|\n", num);
    printf("%%05d 零填充: %05d\n", num);
    
    system("pause");
    return 0;
}

案例二:scanf 安全輸入與類型陷阱

#include <stdio.h>

int main() {
    int a;
    double b;
    
    // 正確:雙輸入,注意 double 用 %lf
    printf("輸入整數和浮點數: ");
    if (scanf("%d %lf", &a, &b) == 2) {
        printf("讀取成功: %d, %.4f\n", a, b);
    } else {
        puts("輸入格式錯誤");
    }
    
    // 類型不匹配演示
    unsigned int u = -1;  // 補碼全 1 → 4294967295
    printf("unsigned -1 = %u\n", u);
    
    short s = -1;
    printf("short -1 用 %%d: %d\n", s);      // 提升為 int,正確
    printf("short -1 用 %%hd: %hd\n", s);    // 顯式 short
    
    return 0;
}

案例三:交互式菜單循環 (do-while + switch)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

void show_menu() {
    puts("=== 選擇操作 ===\n1. 響鈴\n2. 顯示系統時間\n3. 輸出個人信息\n0. 退出");
}

void do_action(int choice) {
    switch (choice) {
        case 1: printf("\a響鈴!\n"); break;
        case 2: system("@echo %date% %time%"); break;  // Windows 專用
        case 3: puts("姓名: 張三\n年齡: 20\n專業: 計算機"); break;
        default: puts("無效選項");
    }
}

int main() {
    int choice = -1;
    do {
        show_menu();
        printf("請輸入選項: ");
        if (scanf("%d", &choice) != 1) {
            // 清理輸入緩衝區
            int c; while ((c = getchar()) != '\n' && c != EOF);
            choice = -1;
            continue;
        }
        do_action(choice);
        if (choice != 0) {
            puts("\n按 Enter 繼續...");
            getchar(); getchar();  // 吸收換行
        }
    } while (choice != 0);
    puts("程序結束");
    return 0;
}

puts vs printf 選擇指南

核心知識點速記卡

  • \n 換行,\r 回車 (行首),\t 制表。
  • %d int,%ld long,%lf double (scanf),%f float/double (printf)。
  • scanf 參數必須取地址 &var,返回值檢查匹配數。
  • %10d 右對齊寬度 10,%-10d 左對齊,%05d 零填充。
  • 菜單循環用 do-while 保證至少顯示一次,switch 分發。
  • 輸入錯誤後必須清空緩衝區 while(getchar()!='\n')。

這三個案例覆蓋了 C 語言入門 80% 的 I/O 與控制流場景。建議逐行敲入、觀察輸出、修改參數實驗,建立「格式化字符串 ↔ 內存佈局 ↔ 輸出效果」的直覺映射。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性putsprintf
自動換行✅❌ 手動 \n
格式化❌ 只能輸出字符串✅ 豐富轉換符
性能快 (無解析開銷)較慢
返回值非負=成功, EOF=失敗輸出字符數, 負值=錯誤
適用場景固定文本、提示信息混合數據、格式化報表