1
C语言程序设计
1.10.2.1 9.2.1 字符输入输出——getchar()、putchar()

9.2.1 字符输入输出——getchar()、putchar()

最简单的控制台I/O函数是getchar()和putchar()函数。本节首先简要介绍在第3章中已经讲过的这两个函数,下一小节将介绍字符串输入输出函数gets()和puts()。

getchar()函数用于从标准输入设备键盘读入单个字符,返回表示读入字符的ASCII码值,并在屏上回显字符。这个函数的缺点是,读入的字符先放在输入缓冲区,直到键入一个回车符才返回给程序。为了克服这个缺点,及时自动地将读入的字符显示在显示屏上,一些C编译程序,如Turbo C设置了函数getche()以完成这种功能。设置的另一个函数是getch(),它的功能和getche()函数基本相同,只是它不把读入的字符回显到屏幕上。

例9-1中程序使用getchar()函数从标准输入键盘读入一个字符,返回字符的ASCII码值,并赋予ch,将ch的值在标准输出设备显示屏上输出。值得指出的是,由于C语言中,整型和字符型能相互转换,例中虽然ch被说明为字符型变量,但getchar()实际返回的是一个整数(由函数的原型定义所确定),因此在大多数应用中,通常也可以把getchar()返回值赋予一个整型变量。

例9-1 getchar()函数的使用。

程序如下:

img673

运行结果:

  Enter a character:

  a

  Your character is:a

与getchar()函数相对应的是putchar()函数。它将单个字符变量输出在标准输出设备显示屏上,于是:

  putchar('a');

表示将小写字母a输出在显示屏上。如果putchar()函数的实参为整数,将把ASCII值与该整数相对应的字符输出在显示屏上,例如:

  putchar(97);

也是将小写字母a输出在显示屏上。putchar()函数的其他实参可以是字符变量、表达式或转义字符。

下面是使用getchar()和putchar()函数的一个简单程序。程序用以返回从标准输入设备输入的字符,当表示END的字符“*”被检测到的时候便停止输入。程序中使用#define语句把END定义为星号“*”。由getchar()读入的每一个字符用while循环条件(ch!=END)进行测试,如果字符不是“*”,将该字符显示在标准输出设备上,并读取下一个字符,如果是“*”字符,程序终止执行,不输出ch的值。

例9-2 使用getchar()和putchar()函数的程序。

img674

运行结果:

img675

运行结果表明该程序在运行时使用了缓冲输入。当包括用星号“*”结尾的一行字符从键盘上输入时,只有在按回车键后,这一行才被传送到程序,读入并显示在屏幕上,而不是读入一个字符显示一个字符。

例9-3是例9-2程序的另一种更为紧凑的形式。程序中把赋值语句“ch=getchar();”放在while循环语句的测试环境中,即:

  while((ch=getchar())!='*')

这里,程序先执行ch=getchar()函数,然后把返回值赋到“ch”中,ch的值作为测试条件,只要不等于“*”,则进行循环。在C语言中,常常使用赋值语句构成一个表达式作为循环的测试条件,以提高编程技巧。

例9-3 例9-2程序的改进。

img676