在我们使用输入和输出函数的时候,总会出现一些莫名其妙的问题
像这样与我们想输出的不符
今天就让我们深入认识输入输出函数
一、用scanf函数输入数据
1.printf函数和scanf函数的一般形式
printf(格式控制,输出列表)
scanf(格式控制,地址列表)
格式控制:是用一个双撇号(“ ”)括起来的字符串,称为格式控制字符串,它包含两个信息
- 格式声明:是由“%”和格式字符组成,例如:%d,%f。它的作用是将输出的数据转化为指定的格式后输出
- 普通字符:
地址列表::由若干个地址组成的列表,可以是变量的地址,可以是字符串首字符的地址。
2.格式字符
格式字符 | 说明 |
d | 输入(输出)有符号的十进制数 |
u | 输入(输出)无符号的十进制数 |
o | 输入(输出)无符号的八进制数 |
x X | 输入(输出)无符号的十六进制数 |
c | 输入(输出)单个字符 |
s | 输入(输出)字符串 |
f | 输入(输出)单精度浮点数 |
lf | 输入(输出)双精度浮点数 |
域宽 | 指定输入数据所占的宽度(列数),域宽为正整数 例:%7.2f 7表示这个数据宽度为7 .2表示这个数保留两位小数 |
二、使用scanf函数应该注意的问题
1.scanf函数中格式控制后边是变量地址,而不是变量名。
如图:这种写法是错误的,要加上“&”
2.如果格式控制字符串中除了格式声明外的其他字符,在输入数据时要在对应的位置输入相同的字符。
3.在用”%c“格式输入字符时,空格字符和“转义字符”中的字符都会作为有效字符输入
我们发现在输入时在两字符间加空格和不加空格输出的结果是不一样的
在两字符之间插入空格下,系统会把第一个字符‘a’送给ch1;第二个字符是空格字符‘ ’送给ch2;第三个字符‘b’送给ch3,这样就会打印出第二种情况。
注意:输入数值时,在两个数值之间需要插入空格(或其他分隔符),以使系统能区分两个数值。在连续输入字符时,在两字符之间不要插入空格或其他分隔符(除非在scanf函数中的格式字符串中有普通字符,这时输入时要在原位置插入字符),系统能区分两个字符。
4.在输入数值数据时,如输入空格、回车或遇到非法字符(不属于数值的字符)认为该数据结束。
第一个数据对应的%d的格式,在输入123之后遇到字符‘a’,因此系统认为数值123后面没有数字了,第一个数据到此结束,就把123给了变量a,变量b是%c的格式;将‘a’给变量b,第二个数据结束; ‘a’后面的数值应该给到变量c,但将‘0’错打成‘o‘,遇到字母o是非法字符,这是认为数值数据到此结束,就将123给了变量c,后面的字符无法读入。
三、字符输入输出函数
1.用putchar输出字符
我们改变代码,发现输出的结果是一样的,这是为什么呢?
我们知道字符类型也属于整型类型,因此将一个字符赋给字符变量和将字符的ASCII值赋给赋给字符变量的作用是完全相同的(但应注意,整形数据的范围是0-127).putchar()函数是输出字符的函数,它输出的是字符而不能输出整数。66是字符B的ASCII值,因此,putchar(66)输出字符B。
说明:putchar(c)中的c可以是字符常量、整形常量、字符变量或整型变量。
2.用getchar函数输入字符
getchar函数只能接收一个字符,如果想输入多个字符要用多个getchar
说明:用键盘输入信息时,并不是在键盘上敲一个字符,该字符就立即送到计算机中。这些字符先暂存在键盘的缓冲器中,只有按了Enter才把这些字符一起送到计算机中,然后按先后顺序赋给对应的变量。
如果每输入一个字符按一次Enter会发生什么情况
我们发现分别输出了两行B和O,这其中又是什么原因呢
其实我们在第一行输入的不是一个字符B,而是两个字符:B和换行符,其中B赋给了变量a,换行符赋给了变量b;第二行又输入两个字符:O和换行符,其中O赋给了变量c,换行符没有给任何变量。在输出时,就输出字符B,然后换行,再输出字符O,最后执行putchar(’\n‘)换行。
注意:getchar函数不仅可以从输入设备获得一个可显示的字符,而且可以获得在屏幕上无法显示的字符,如控制字符。
本次的内容到这里就结束啦。希望大家阅读完可以有所收获,同时也感谢各位读者三连支持。文章有问题可以在评论区留言,博主一定认真认真修改,以后写出更好的文章。