C&C++快速入门
15、输入输出函数
1、课程目标
- 掌握printf/scanf系列函数
- 理解标准输入输出与文件IO
- 掌握Windows控制台API
- 了解缓冲区和流的概念
2、名词解释
| 术语 | 说明 |
|---|---|
| printf | 格式化输出到标准输出 |
| scanf | 从标准输入格式化读取 |
| fprintf/fscanf | 文件格式化IO |
| stdout/stdin/stderr | 标准输出/输入/错误流 |
| 缓冲区 | 临时存储区,提高IO效率 |
| fflush | 刷新缓冲区 |
3、代码实现
1. printf格式化输出
#include <stdio.h>
int main() {
printf("=== printf格式化 ===\n\n");
// 基本格式
printf("【基本格式】\n");
printf("整数: %d\n", 42);
printf("无符号: %u\n", 42u);
printf("十六进制: 0x%X\n", 255);
printf("浮点数: %f\n", 3.14159);
printf("字符串: %s\n", "Hello");
printf("字符: %c\n", 'A');
printf("指针: %p\n", (void*)main);
// 宽度和精度
printf("\n【宽度和精度】\n");
printf("[%10d]\n", 42); // 右对齐,宽度10
printf("[%-10d]\n", 42); // 左对齐
printf("[%010d]\n", 42); // 补零
printf("[%.5f]\n", 3.14); // 精度5位
printf("[%.5s]\n", "Hello World"); // 截断字符串
return 0;
}
2. scanf输入
#include <stdio.h>
int main() {
printf("=== scanf输入 ===\n\n");
int num;
char str[50];
// 基本输入
printf("输入一个整数: ");
if (scanf("%d", &num) == 1) {
printf("你输入了: %d\n", num);
}
// 清除输入缓冲区
while (getchar() != '\n');
// 字符串输入
printf("输入一个单词: ");
scanf("%49s", str); // 限制长度防止溢出
printf("你输入了: %s\n", str);
// 更安全的输入方式: fgets
while (getchar() != '\n');
printf("输入一行文字: ");
if (fgets(str, sizeof(str), stdin)) {
printf("你输入了: %s", str);
}
return 0;
}
3. Windows控制台API
#include <stdio.h>
#include <windows.h>
int main() {
// 获取控制台句柄
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
// 设置文本颜色
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
printf("红色文字\n");
SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
printf("绿色文字\n");
// 恢复默认颜色
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("正常颜色\n");
// 使用WriteConsole
const char* msg = "\nHello WriteConsole!\n";
DWORD written;
WriteConsoleA(hOut, msg, strlen(msg), &written, NULL);
return 0;
}
4、课后作业
4.1、作业1:输入验证
实现一个安全的整数输入函数,能处理无效输入。
4.2、作业2:彩色输出
封装一个支持彩色输出的printf函数。