getchar()、putchar()
getchar和putchar是单字符I/O函数,为什么不是一个一个输出而是把整个字符都输出了?
这就要了解一下缓冲区了。缓冲区的大小取决于系统,常见的大小有512字节和4096字节。
在键盘上输入出现换行符(按下Enter键)时刷新缓冲区。这些函数从缓冲区拿字符而不是直接能收到来自键盘上的字符,当“1234asdf”存入缓冲区,getchar()开始拿字符,putchar()进行输出,直到把缓冲区内的字符清空为止,这也就是为什么不用一个一个从键盘上输入再输出。
从缓冲区拿而不是直接接收来自键盘上的字符。
当我们从键盘上输入1时循环却执行了两次,这是因为缓冲区里有两个字符,后面的换行符“Enter"也做为字符进入缓冲区,所以进行了两次循环。
如果要输入一次循环一次就要把最后的换行符消耗掉,改成这样。
跳过剩余的输入行
getchar和scanf都能处理字符但是不能把它们搞混,因为getchar读取每个字符,包括空格、制表符和换行符;而scanf在读取数字时则会跳过空格、制表符和换行符。
putchar和printf都能进行输出但putchar只能单个字符输出而printf功能就比putchar功能要强大了,配合转换说明使用就可以打印出你想要打印的效果