3.3单个字符的输入和输出
3.3单个字符的输入和输出
本节要讨论的主要问题
用getchar()从键盘输入单个字符
用putchar()向屏幕输出单个字符
在介绍字符输入输出函数之前,我们先介绍一下什么是字符常量,C语言规定,字符常量就是用单引号扩起来的一个字符。
例如3是表示一个整数,但是如果用单引号扩起来的话,那么它就表示数字字符。
像这样吧字符放在一对单引号里的做法,适合于大多数的可打印字符。
但是对于某些控制字符,无法从键盘输入的特殊字符该怎么办呢?
C语言引入了一些特殊的字符常量就是转义字符。
转义字符都是以反斜线开头的,对于转义字符的使用,同样要将其放到一对单引号内。‘/n’表达换行,每个转义字符都有其特定的含义,通常用于描述一些特别的控制字符的,这个表格就是列出了,常用的转义字符。
区分换行符合回车符号。
\n表达换行,将光标移到下一行的起始位置。
\r表达回车,(不换行)将光标移动到当前行的起始位置,而不是下一行的起始位置。
那么字符在内存中是如何存储的呢?
之前介绍过不同类型的数据在内存中的存储形式都是不同的。
而字符型数据在内存中存储的就是它对应的ASCII码值的二进制值,
从表中,可以查到,字符所对应的ASCII码值。
例如对于B的。。。。
十六进制的最低位是2×16^0次方+…
八进制的最低位是2×8^0次方…
由于字符在存储中,都是存储的ASCII码值,而所有的ASCII码值又都可以以转义的方式来表示,例如我们可以用这样的方式来表示,一个ASCII码值所代表的字符。既可以以八进制,又可以以16进制 来表示。
如果是八进制来表示,那么就用三位八进制来表示,而十六进制就用两位十六进制数来表示,例如同样对于‘B’这个字符,我们可以用八进制的来表示,就是用转义 的方式来表示它‘\102’如何来定义一个字符型变量呢?
定义变量ch的同时,对变量做了一给初始化,就是好用大写的英文字母来对变量ch进行初始化,在用字符常量,对变量赋值以后,字符型变量就得到了这个字符常量的值,而字符在内存中又是以他的ASCII码值来存储的,因此字符型变量在内存中所表示的值,其实也就是一个普通的整数,既然它是一个普通的整数,我们就可以对它进行算术运算,如图
小写字母的ASCII码值,都比大写的字母的ASCII码值,都大32.
利用大小写英文字母的ASCII码值,之间的差值为32这个特定,我们就可以实现了大小写英文字母相互转换。如何用C语言的标准输入输出函数来实现单个字符的输入输出,C语言提供用于实现字符输出的函数是putchar()
要在()内给出要输出的字符型变量的文字,
向屏幕输出变量ch保存的字符
而字符输入函数getchar()
这个函数比较特殊,在使用这个函数,是不需要参数的,就是在圆括号内,不需要写任何的参数,那么从键盘输入的字符是如何接受进来的呢?这个是通过getchar函数的函数值来返回的,也就是说,用户从键盘输入的这个字符,是作为getchar函数的函数值返回的。既然如此,我们将这个变量赋值给ch,那么通过这种方式,那么我们就可以得到用户从键盘上得到的字符。
假设先给提示一个英文字符 (Press a key and then press Enter:B→b)
屏幕要求输出一个小写的英文字母b
输出这个提示信息是由printf函数来实现的。
Printf函数里面的格式字符串中的非格式字符的这些普通字符的内容是要原样输出到屏幕是上的。就可以起到一个输出提示信息的作用,然后我们用getcha 接收用户从键盘输入的字符,并且将这个字符保存在变量ch中,接下来,执行这样的赋值语句
将ch中的值加上32,从新写回到ch中去,刚才我们已经分析,小写字母的ascii码值比大写的要大32,因此,将大写字母的英文字母ASCII码值加上32得到就是它对应的小写的ASCii值,得到小写字母的ASCII值,在用putchar来输出ch这个变量中的保存的小写的英文字符,如果将ch加32改成减32的话,那么它就可以实现一个将用户输入的小写的字符,转变成对应的大写的英文字符的作用。
最后一条一句用putchar来输出一个转义字符,这个转义字符就是一个换行符,它的作用将光标移动到下一行的起始位置。为什么哟在程序的最后一行加上这样的一个语句呢?如果用一对双引号扩起来,代表的是一个字符串,而Putchar,只能输出一个字符,不能输出一个字符串。因此,如果这样写就错误的。
既可以用putchar来输出变量的值,也可以用printf来输出变量的值。
用Printf函数来输出字符型变量的值,好处就是它可以同时,以另外的一种格式来输出变量的值,十进制整型的格式来输出变量的值,而以十进制整型的格式来输出变量的值,就是输出它的ascii码值,那么这也说明字符型变量%c和%d这两种格式来进行输出。
%c输出字符型变量保存的字符,而%d输出的是字符型变量保存的字符的ascii码值,因此这个程序的输出结果先输出小写的英文字母b 逗号是原样输出,在输出小写英文字母对应的ascii值。getchar和putchar它输出的方法比较简单,而且速度快,而scanf和printf它更灵活。因为,它既可以输出字符型变量,也可以输出其他性变量,并且还可以输出多种类型的变量。但是getchar和putchar只能用于输出单个字符,不能够输出其他类型的变量。