C语言基础入门:2.5基础输入输出
【C语言基础】输入输出完全指南:从printf到缓冲区安全
文章目录
- 【C语言基础】输入输出完全指南:从printf到缓冲区安全
- 一、格式化输出艺术:printf函数详解
- 二、scanf输入安全与缓冲区处理
- 三、字符级交互:getchar与putchar实战
- 程序员建议(新手必看)
- 理解检测(答案下期公布)
一、格式化输出艺术: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) - 组合使用
getchar
和while
循环处理连续输入 - 利用字符函数实现简单交互逻辑
程序员建议(新手必看)
- 输入输出格式统一原则:
printf
的格式字符串应与实际数据类型完全匹配 - 防御性编程:使用
fgets
+sscanf
组合替代直接使用scanf
- 缓冲区管理三步法:
- 设置合理的输入长度限制
- 检查函数返回值
- 及时清空输入缓冲区
- 交互优化技巧:在关键操作前添加
fflush(stdin)
强制刷新输入流
理解检测(答案下期公布)
- 编写程序输出如下表格:
姓名 年龄 成绩
Alice 20 95.50
Bob 22 89.00
-
实现安全密码输入功能:
- 显示星号替代实际输入
- 限制最大长度16字符
- 支持退格键修改
-
编写程序验证用户输入的整数是否符合范围要求(1-100),若不符合要求重新输入
下期预告:《C语言流程控制:从条件语句到循环优化》,欢迎在评论区留下您对本文的疑问或建议!