您的位置:首页 > 其它

第四章 - 字符串和格式化输入输出——scanf()函数

2010-03-21 16:02 239 查看
1、scanf()函数把输入的字符串转换成各种形式:整数、浮点数、字符和C的字符串。

2、printf()把%f、%e、%E、%g、%G同时用于float类型和double类型,而scanf()只把他们用于float类型,而用于double类型时要求使用l修饰符。

3、scanf()的转换说明符

转换说明符

意义
%c
把输入解释成一个字符
%d
把输入解释成一个有符号十进制整数
%e、%f、%g、%a
把输入解释成一个浮点数
%E、%F、%G、%A
把输入解释成一个浮点数
%i
把输入解释成一个有符号十进制整数
%o
把输入解释成一个有符号八进制整数
%p
把输入解释成一个指针(一个地址)
%s
把输入解释成一个字符串;输入内容以第一个非空白字符作为开始,并且包含直到下一个空白字符的全部字符。
%u
把输入解释成一个无符号十进制整数
%x、%X
把输入解释成一个有符号十六进制整数
4、scanf()转换修饰符

修饰符

意义
*
滞后赋值
digit(s)
最大字段宽度;在达到最大字段宽度或者遇到第一个空白字符时(无优先原则)停止对输入项的读取
hh
把整数读作signed char或unsigned char
ll
把整数读作long long或者unsigned long long
h,l或L
%hd,%hi -- 存储在short int中
%ho,%hx,%hu -- 存储在unsigned short int中
%ld,%li -- 存储一个long中
%lo,%lx,%lu -- 存储在unsigned long中
%le,%lf,%lg -- 以double类型存储
将L(非l)与e、f和g一起使用指示该值以long double类型存储
如果没有这些修饰符,d、i、o和x指示int型
而e、f、g指示float型。
5、scanf()读取原理:
假设使用%d来读取一个整数。scanf()跳过空白字符(空格、制表符和换行符)直到遇到非空白字符。因为他试图读取一个整数,所以他发现一个数字字符或者一个符号。一直连续读取并保存,直到遇到一个非数字的字符,遇到后则定位读取到了整数的尾部。scanf()把这个非数字字符放回输入,这意味着当程序下一次开始读取输入时,将从前面被放弃的那个非数字字符开始读取。
如果使用了字符宽度,那么scanf()在字段结尾或者在第一个空白字符处(二者先到达的一个)终止。
如果第一个非空白字符不是数字,则scanf()会停在,不会赋给指定的变量。
如果使用%s说明符,那么空白字符意外的所有字符都是可以接受的,如果指定存储到一个数组中,则会自动的加入结尾符。
如果使用%c说明符,那么所有的输入字符都是平等的,不会跳过空白符或者换行符。

6、用户输入需要与要求输入的格式相同。如scanf("%d,%d",&a,&b),则在输入时必须加入逗号。

7、除了%c以外的说明符会自动跳过输入项之前的空格,即scanf("%d",&n)与scanf(" %d",&n)是相同的,而scanf("%c",&ch)读取在输入中遇到的第一个字符,而scanf(" %c",&ch)则会读取遇到的第一个非空白字符。
eg:读取 -13.45e12# 0(第一个是空格)
%d -- -13
%f -- -13.45e12
%s -- -13.45e12#
%c -- (空格符)

8、scanf()函数返回成功读入的项目个数,当未读到内容时,返回0,检测到“文件结尾时”,返回EOF(end of file)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: