前言
本篇文章介绍getchar和putchar
写在前面
输入缓冲
:为输入设备预留的一块内存缓冲区,输入缓冲分为行缓冲和全部缓冲区
,我们对于键盘的输入,一般使用行缓冲,意思就是按下回车键,缓冲数据就会全部进入输入流stdin中
,然后我们程序才会处理数据
流
:我们平时的键盘输入,文件读取,文件写入,控制台输出,其实都是在操作流,你可以简单的把流理解成一段数据的指针
。键盘的输入流是stdin,控制台打印的输出流是stdout。我们的getchar和putchar其实就是在操作这两个流。 我们输入字符点击回车后,缓冲区会包含回车键,并且会一并发送给输入流
文件重定向
:我们在运行程序的时候,可以通过程序名称 <filename
来把应用程序的stdin流和文件filename关联起来,这样如果你程序中使用getchar从输入流中获取字符的话就相当于你在读取这个文件。我们也可以用程序名称 >filename
把应用程序的stdout流和文件filename关联起来,这样当你通过比如putchar输出字符的话相当于你在写文件。
getchar
顾名思义,getchar函数和scanf不同,他会一个字符一个字符的从输入流中读取数据,每次都读取一个字符。看下面的例子:
#include <stdio.h>
int main(int argv, char** argc)
{
char a;
while((a = getchar())!='n')
{
putchar(a);
}
return 0;
}
输入
sadaa asdad
运行结果
sadaa asdad
光标在这里
注意,运行结果以后光标是停留在新一行的。
输入
dadas an
运行结果
dadas a光标在这里
所以我们得出下面的结论:
getchar能获取所有的字符,包括空格,制表符,换行符,scanf方法会跳过空格,制表符,换行符
getchar把输入流中的所有数据全部当作字符合集处理,而scanf会根据转换说明符识别不同类型的数据
putchar
把一个字符写入输出流中,可以写入空格,制表符,换行符
puchar返回值是一个整数,返回的是字符的ascii数值
表示
#include <stdio.h>
int main(int argv, char** argc)
{
char a='a';
printf("\n%d\n",putchar(a));
return 0;
}
输出结果为
a
97