2.5基础输入输出

104 阅读3分钟

【C语言基础】输入输出完全指南:从printf到缓冲区安全

一、格式化输出艺术:printf函数详解

#include <stdio.h>

int main(void) {
    // 基础整数输出
    int age = 25;
    printf("我的年龄是:%d\n", age);  // 【%d】处理整型数据
  
    // 浮点数精度控制
    double pi = 3.1415926;
    printf("圆周率:%.2f\n", pi);     // 【%.2f】保留两位小数
  
    // 字符串格式化
    char name[] = "Alice";
    printf("姓名:%s | 长度:%zu\n", name, sizeof(name));  // 【%s】字符串,%zu输出size_t类型
  
    // 组合式输出
    printf("%-10s|%5d|%8.3f\n", "Tom", 30, 98.7654);  // -号左对齐,数字控制列宽
    return 0;
}

【关键知识点】:

  • 格式说明符必须与变量类型严格匹配
  • 使用%m.nf控制浮点数显示精度
  • %-10s实现左对齐字符串输出

二、scanf输入安全与缓冲区处理

#include <stdio.h>

int main(void) {
    // 危险示例:可能引发缓冲区溢出
    char danger_str[10];
    // printf("输入字符串(危险):");
    // scanf("%s", danger_str);  // 输入超过9字符会导致溢出
  
    // 安全解决方案
    char safe_str[10];
    printf("输入字符串(安全):");
    scanf("%9s", safe_str);  // 【字段宽度限制】确保不超过数组容量
  
    // 混合输入处理
    int num;
    char ch;
    printf("输入数字和字符:");
    scanf("%d %c", &num, &ch);  // 空格跳过空白字符
  
    // 清空输入缓冲区
    while(getchar() != '\n');  // 【重要】清除残留输入
  
    return 0;
}

【输入安全要点】:

  • 始终为字符串指定最大长度(如%9s
  • 检查scanf返回值验证输入有效性
  • 处理混合输入时及时清空缓冲区

三、字符级交互:getchar与putchar实战

#include <stdio.h>

int main(void) {
    // 字符回显程序
    printf("输入字符(按q退出):\n");
    char c;
    while((c = getchar()) != 'q') {  // 【注意】getchar()返回int类型
        putchar(c);
        if(c == '\n') continue;      // 跳过换行符处理
    }

    // 输入确认功能实现
    printf("确定要退出吗?(y/n)");
    int confirm = getchar();
    while(getchar() != '\n');        // 清空输入缓冲区
    if(confirm == 'y') {
        printf("程序退出\n");
    }
  
    return 0;
}

【字符处理技巧】:

  • 使用int类型接收getchar返回值(正确处理EOF)
  • 组合使用getcharwhile循环处理连续输入
  • 利用字符函数实现简单交互逻辑

程序员建议(新手必看)

  1. 输入输出格式统一原则:printf的格式字符串应与实际数据类型完全匹配
  2. 防御性编程:使用fgets+sscanf组合替代直接使用scanf
  3. 缓冲区管理三步法:
    • 设置合理的输入长度限制
    • 检查函数返回值
    • 及时清空输入缓冲区
  4. 交互优化技巧:在关键操作前添加fflush(stdin)强制刷新输入流

理解检测(答案下期公布)

  1. 编写程序输出如下表格:
姓名     年龄    成绩
Alice     20     95.50
Bob       22     89.00
  1. 实现安全密码输入功能:

    • 显示星号替代实际输入
    • 限制最大长度16字符
    • 支持退格键修改
  2. 编写程序验证用户输入的整数是否符合范围要求(1-100),若不符合要求重新输入


下期预告:《C语言流程控制:从条件语句到循环优化》,欢迎在评论区留下您对本文的疑问或建议!