字符的输入和输出——getchar()和putchar()

I/O是什么??

I/O就是input和output的缩写,即输入和输出。像鼠标、键盘、显示器与主机连接的接口称为I/O接口,这些都是与主机进行信息输入或输出的设备;头文件stdio.h,其名称的意义为“standard input & output(标准输入和输出)”;而printf()、scanf()、getchar()、putchar()等等都属于I/O函数,这些函数都用于做信息的交换。另外执行信息交换的对象也是不唯一的,比如程序与程序、(人通过)设备与程序等等。


getchar()和putchar()

两个函数的声明分别为:

int getchar(void);

int putchar(int _Character);

这两个函数就是用来获取和显示字符的,并且每次只能处理一个字符。这里应注意,char也是一种整数类型。

我们可以借助getchar()来终止一个循环,比如当你输入字符‘#’时,另一个循环终止。

code:

#include 
int main(void)
{
	char ch;
	while ((ch = getchar()) != '#')
		putchar(ch);            //putchar()用来显示参数所表示字符
	return 0;
}

这个程序可以使你通过键盘输入一段字符,并在按下Enter后将它们全部显示出来(直到输入‘#’并回车后程序结束):

字符的输入和输出——getchar()和putchar()_第1张图片 图1


getchar()是怎么获取字符的??(缓冲区)

以上面的运行结果(图1)为例,当我们输入“qwer io”这一串字符时,这些字符会被自动收集并储存在一个叫缓冲区的地方。而后当我们按下Enter键,getchar()再从缓冲区中按顺序拿取一个字符,当拿到字符'#'时,while循环退出。

这个过程如下图所示:

字符的输入和输出——getchar()和putchar()_第2张图片


有些系统没有缓冲区,可以想象到没有缓冲区的运行结果应该为:

qqwweerr  iioo

即用户每输入一个字符将不会被送往缓冲区,而是直接被getchar()拿取,然后被putchar()显示,直到输入#(并且输入#后程序将直接退出,而不是输入#再按Enter键退出)


文件结尾

    当计算机读取文件时,需要知道文件的结尾,检测文件结尾的方法不止一种,其中一种方法是用一个特殊字符来标记文件的结尾,比如在上面一个程序中,用'#'来标记了结尾。但是'#'也是一种很常用的字符,用它来标记结尾并不总是合适。往往不同系统都会有自己标记文件结尾的字符,Windows中用Ctrl+Z来标记结尾。

    在C语言中,当getchar()获取文件结尾时将返回一个特殊值——EOF,EOF(end of file的缩写)实际上就是整数-1,之所以是-1是因为它不能表示任何标准字符(getchar()返回值为0~127)。由此,我们可以将while((ch=getchar())!='#')改成while((ch=getchar())!='EOF'),当按下Ctrl+Z时循环退出。

你可能感兴趣的:(C语言学习)