C语言输入输出函数
一、输入输出的本质
在 C 语言中,输入输出是以 计算机为中心 来定义的:
- 输入(Input):把数据“输入”到计算机;
- 输出(Output):把计算结果“输出”到终端(屏幕)或文件中。
C语言的标准输入输出头文件是:
#include <stdio.h>
二、字符输入输出函数
1. putchar()
向终端输出一个字符。
int putchar(int c);
- 参数:要输出的字符;
- 返回值:输出字符的 ASCII 码;
- 示例:
#include <stdio.h>
int main()
{
char c = 'c';
putchar('a');
putchar('a' + 1); // 输出 b
putchar(c); // 输出 c
return 0;
}
2. getchar()
从终端读取一个字符(阻塞输入)。
int getchar(void);
- 返回值:获取到的字符的 ASCII 码;
- 示例:
#include <stdio.h>
int main()
{
char c = 0;
c = getchar(); // 等待输入
putchar(c); // 输出输入的字符
}
阻塞输入:程序会暂停等待用户输入,直到按下回车。
三、格式化输出函数:printf()
1. 基本格式
int printf(const char *format, ...);
format是格式控制字符串;...表示可变参数(多个输出值)。
2. 常用格式说明符
| 类型 | 控制符 | 示例输出 |
|---|---|---|
| 有符号整形 | %d | 26 |
| 无符号整形 | %u | 888899 |
| 八进制 | %o | 32 |
| 十六进制(小写) | %x | 1a |
| 十六进制(大写) | %X | 1A |
| 字符 | %c | 'a' |
| 字符串 | %s | "hello" |
| 浮点数 | %f | 3.141500 |
| 双精度 | %lf | 700000.000000 |
| 科学计数法 | %e | 7.000000e+05 |
| 指针(内存地址) | %p | 0x7ffee123abcd |
| 输出百分号 | %% | % |
3. 示例:04printf.c
#include <stdio.h>
#include <unistd.h>
int main()
{
int num = 26;
printf("整形有符号 %d\n", num);
printf("整形8进制 %o\n", num);
printf("整形16进制 %x\n", num);
char c = 'a';
printf("字符类型 %c, ASCII : %d\n", c, c);
unsigned int b = 888899;
printf("整形无符号 %u\n", b);
float f = 3.1415;
printf("float %f\n", f);
double d = 7e5;
printf("double %lf, 科学计数法 %e\n", d, d);
long l = 8899712;
printf("long %ld\n", l);
printf("字符串示例: %s\n", "张三");
printf("变量地址: %p\n", &num);
printf("100%% 完成!\n");
}
4. 扩展控制符
| 控制符 | 功能 | 示例 |
|---|---|---|
%5d | 宽度为5,右对齐 | 26 |
%-5d | 宽度为5,左对齐 | 26 |
%05d | 不足5位补0 | 00026 |
%.2f | 保留两位小数 | 3.14 |
%#o | 八进制前加 0 | 032 |
%#x | 十六进制前加 0x | 0x1a |
四、格式化输入函数:scanf()
int scanf(const char *format, ...);
1. 使用注意
- 输入变量要加取地址符号
&; - 接收字符串不加
&; - 不要在格式中加入多余字符(如
\n)。
2. 示例
#include <stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数: ");
scanf("%d", &num);
printf("你输入的是: %d\n", num);
return 0;
}
3. 扩展练习(来自 06scan_lianxi.c)
int num1 = 0, num2 = 0;
printf("请输入两个整数: ");
scanf("%d %d", &num1, &num2);
printf("两数和为: %d\n", num1 + num2);
五、字符串输入输出函数
1. gets()(不推荐)
从终端读取一行字符串(不安全,可能导致缓冲区溢出)。
char str[50];
gets(str);
printf("输入的字符串是: %s\n", str);
建议使用
fgets()替代:
fgets(str, 50, stdin);
2. puts()
向终端输出一个字符串,并自动换行。
#include <stdio.h>
int main()
{
char str[50] = "nihao, zhangsan";
puts("hello");
puts(str);
}
输出结果:
hello
nihao, zhangsan
六、printf 与转义字符总结
| 转义符 | 功能 | 示例 |
|---|---|---|
\n | 换行 | printf("Hello\n"); |
\t | 制表符(4个空格) | printf("\tHi"); |
\b | 退格 | printf("Y\b="); |
\\ | 输出反斜杠 | printf("\\"); |
\r | 回到本行开头 | 用于动态刷新输出 |
%% | 输出百分号 | printf("100%%"); |
七、小结
| 函数 | 功能 | 返回值 |
|---|---|---|
putchar() | 输出单个字符 | 输出字符的 ASCII 值 |
getchar() | 输入单个字符 | 输入字符的 ASCII 值 |
printf() | 格式化输出 | 成功输出字符数 |
scanf() | 格式化输入 | 成功输入项数 |
puts() | 输出字符串(自动换行) | 正常返回非负值 |
gets() | 输入字符串(不安全) | 返回输入字符串指针 |

被折叠的 条评论
为什么被折叠?



