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

来源:互联网 发布:古城数据 编辑:程序博客网 时间:2024/05/16 05:59

1scanf()函数把输入的字符串转换成各种形式:整数、浮点数、字符和C的字符串。

 

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

 

3scanf()的转换说明符

转换说明符

意义

%c

把输入解释成一个字符

%d

把输入解释成一个有符号十进制整数

%e%f%g%a

把输入解释成一个浮点数

%E%F%G%A

把输入解释成一个浮点数

%i

把输入解释成一个有符号十进制整数

%o

把输入解释成一个有符号八进制整数

%p

把输入解释成一个指针(一个地址)

%s

把输入解释成一个字符串;输入内容以第一个非空白字符作为开始,并且包含直到下一个空白字符的全部字符。

%u

把输入解释成一个无符号十进制整数

%x%X

把输入解释成一个有符号十六进制整数

 

4scanf()转换修饰符

修饰符

意义

*

滞后赋值

digit(s)

最大字段宽度;在达到最大字段宽度或者遇到第一个空白字符时(无优先原则)停止对输入项的读取

hh

把整数读作signed charunsigned char

ll

把整数读作long long或者unsigned long long

h,lL

%hd%hi -- 存储在short int
%ho
%hx%hu -- 存储在unsigned short int
%ld
%li -- 存储一个long
%lo
%lx%lu -- 存储在unsigned long
%le
%lf%lg -- double类型存储
L(l)efg一起使用指示该值以long double类型存储
如果没有这些修饰符,diox指示int
efg指示float型。

 

5scanf()读取原理:

   假设使用%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 --  (空格符)

 

8scanf()函数返回成功读入的项目个数,当未读到内容时,返回0,检测到文件结尾时,返回EOFend of file)。

 

 

原创粉丝点击