输入输出缓存区
输出缓存区
- 输出函数printf putchar
- 打印字符时程序会先把字符放在输出缓存区 特定时刻一起显示到控制台
windows使用printf后立即刷新
Linux程序结束才刷新缓存
输入缓存区
- 输入函数scanf getchar
- 输入函数属于阻塞函数 按下\n后 输入的字符进入缓存区 然后输入函数获取缓存区并删除已获取的字符 并解除阻塞状态
- 输入缓存区仍有数据时getchar不阻塞 会直接打印缓存区剩下的字符
输入了a\n 缓存了a\n c1吸收了a c2直接吸收了缓存区的\n
eg 使用getchar读取输入字符串
#include <stdio.h>
int main()
{
char str[20];//可存储19个字符
int i = 0;
while (i < 20 - 1)
{
char c;
c = getchar();
str[i++] = c;
if (c == '\n')
break;
}
str[i] = '\0';
printf(str);
return 0;
}
不带缓存的输入函数
- 要包含头文件#include<conio.h>
- 按下键盘程序就能获取到字符
- 为区别标准函数与平台函数 getch和getche前面加_
getch函数
- 相当于无缓存的getcher
- 按下键后无需回车 程序立刻获取字符 随后通过putchar打印在控制台上
#include <stdio.h>
#include<conio.h>
int main()
{
while (1)
{
char c;
c = _getch();
putchar(c);//输入后使用putchar打印在控制台上
if (c == 'q')
break;//输入123q就立刻显示123q并退出程序
}
return 0;
}
getche函数
- 相当于无缓存有回显的getchar
- 按下键后无需回车 程序立刻获取字符并自动打印在控制台上 无需putchar
应用实例 懒得打了直接截图
putchar函数
与getchar对应 putchar就是输出字符
格式为putchar('a');或者 char c=a; putchar(c);
如果是putchar(65) 则根据ASCII码转换 结果为putchar(A)