3.格式IO

发布时间:2019-09-20 07:39:14编辑:auto阅读(2309)

    一.格式化输出:printf()

    1.不要忘记给格式控制字符串后面的列表中的每个项目都用一个转换说明。

    Print(“%d%d”,num);//这是错误的

    2.Printf()函数打印列表中使用的是值,而不管是变量常量还是表达式

    如果要打印%本身,则用%%替代。

    3.printf函数不会进行任何类型转换(包括隐式转换),它只是从内存中读出你所提供的元素的值(按照%d%f等控制字符提示的格式)

    4.格式化规定符

    ━━━━━━━━━━━━━━━━━━━━━━━━━━

    符号作用

    ——————————————————————————

    %d 十进制有符号整数

    %u 十进制无符号整数

    %f 浮点数

    %s 字符串

    %c 单个字符

    %p 指针(地址)的值

    %e 指数形式的浮点数

    %x%X 无符号以十六进制表示的整数

    %0 无符号以八进制表示的整数

    %g 自动选择合适的表示法

    ━━━━━━━━━━━━━━━━━━━━━━━━━━

    5.一些特殊字符

    ━━━━━━━━━━━━━━━━━━━━━━━━━━

    字符作用

    ——————————————————————————

    \n 换行

    \f 清屏并换页

    \r 回车

    \t Tab

    \xhh 表示一个ASCII码用16进表示

    其中hh1216进制数

    ━━━━━━━━━━━━━━━━━━━━━━━━━━

    6.格式规定符说明

    1)对于d%

    (1)%md: 指定输出的宽度。数据位数小于m,左端补空格;大于m,按实际位数输出。比如说%3d 表示输出3位整型数,不够3位右对齐。

    a=123;b=12345;

    printf("%4d,%4d",a,b);

    输出结果为:_123,12345 

    若想在输出值前加一些0就应在场宽项前加个0。例如%04d 表示在输出一个小于4位的数值时,将在前面补0使其总宽度为4位。

    (2)%ld: 输出长整型数据。比如下面的就不能用%d

    long a=123456;

    printf("%ld",a); 

    printf("%9ld",a); 输出结果为:___123456

    (3)%-md:

    可以控制输出左对齐,即在"%"和字母之间加入一个"-" 号可,没有说明则右对齐。

    比如:%-7d 表示输出7位整数左对齐

    2)对于f%

    (1)%m.nf

    表示最大场宽m,小数位为n位,整数位则为m-n-1位,够m位右对齐。

    比如:%9.2f 表示输出场宽为9的浮点数,其中小数位为2,整数位为6,小数点占一位,不够9位右对齐。

    (2)%-m.nf可以控制输出左对齐。

    (3)%lf 表示输出double浮点数。

    3)对于%s%e同样道理

    %-10s 表示输出10个字符左对齐,没有说明则右对齐。

    %8s 表示输出8个字符的字符串,不够8个字符右对齐。

    %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9,则第9个字符以后的内容将被删除。

    4)其它注意

    (1)超过说明的场宽

    如果字符串的长度或整型数位数超过说明的场宽,将按其实际长度输出。对浮点数,若整数部分位数超过了说明的整数位宽度,将按实际整数位输出。若小数部分位数超过了说明的小数位宽度,则按说明的宽度以四舍五入输出。

     

    (2)浮点数表示字符或整型量的输出格式,如%6.9s %6.9d

    如果用浮点数表示字符或整型量的输出格式,小数点后的数字代表最大宽度,小数点前的数字代表最小宽度。若大于最大宽度,则最大宽度以后的内容将被删除。

    比如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9,则第9个字符以后的内容将被删除。

     

    7.可以在%和定义转换字符之间通过插入修饰符为基本的转换说明加以修改。

    %+6.2:显示正号

    %010d:长度10,达不到10,左边补0

    %4d:字段宽度最小值为4,小于4,右对齐

    %-4d:字段宽度最小值为4,小于4,左对齐

    %5.2f:浮点型精度

    %hu%6.4hdh和整数转换说明符一起,表示一个长整型

    %ld%8lul和整型转换说明符一起,表示长整型。

    %lld%8llull和整数转换说明符一起,表示long long型或unsight long long 型。

    8.四个printf函数

    9.%g的对比测试:

    10.

    二.格式输入:scanf()

    1.sanf函数族用于分析输入字符串,并将字符序列转换成指定类型的变量。格式之后的参数包含了变量的地址,用于转换结果初始化这些变量。

    2.一般形式:scanf(“格式控制字符串”,变量地址列表)

    格式控制字符串:用于控制输入数据格式,必须以引号引导,内容由一个或多个格式控制字符组合而成,也可以含有非格式控制字符,非格式控制字符称为普通字符。普通字符按原样在对应位置输入

    变量地址列表:用于指定存放数据的变量地址。如果需要给多个变量输入数据,则各变量地址要用逗号隔开。变量地址表示方式是:&变量名。例如,&a表示变量a的地址。

    3.Scanf()的隐式类型匹配

    4.Scanf()只从缓冲区中获取数据,当缓冲区中有数据时,不会等待用户输入

    解决的方法是使用:while(getchar()!=’\n’); 清空缓冲区中的数据。

    5.格式控制

    1)格式字符

    格式字符串形式为:%*】【width】【F|N】【h|ltype

    printf函数的格式符有相同之处,也有不同之处。

    1*为输入赋值抑制字符,表示该格式说明要求输入数据,但不赋值,也即在地址列表中没有相应的地址项,例如:

    scanf(“%3d%*5d%f,&a,&x;

    如果执行时输入:

    2001200 4.1

    200传给a4.1传给x1200不赋给任何变量。

    2width为宽度指示符,表示该输入项最多可输入的字符个数。如遇空格或不可转换的字符,读入的字符将减少,例如:

    scanf(“%3d%5d%f,&a,&x;

    如果执行时输入:

    2001200 4.1

    200传给a1200传给b4.1传给x

    %3d”控制第一个数据只取3个字符转换成整型数200;“%5d”控制第二个数据,但从输入流中截取4个字符后,遇到空格,因此第二个数据只得到了4位数。

    2)普通字符

    printf函数的普通字符不同,scanf的格式控制字符串中普通字符是不显示的,而是规定了输入时必须输入的字符,例如:

    scanf(“i=%d”,&i);

    执行该语句时,输入应按下列格式:

    i=30

    运行语句:

    scanf(“%d%f”,&a&x);

    输入格式应为:

    100.3

    %d%f”说明输入一个整型数和一个浮点数之间要输入一个逗号。

    6.地址列表

    地址是由若干个地址组成的列表,可以是变量的地址、字符串的首地址、指针变量等,各地址间以逗号间隔。

    格式输入函数执行结果是将键盘输入的数据流按格式转换成数据,存入与格式相对应的地址指向的存储单元中。

    7.三个scanf函数

    8.Scanf的注意事项

    1)scanf()函数使用的转换说明符跟printf函数几乎相同,唯一区别是前者用%lf来说明double数据类型,而不是跟float型数据一样都用%f

    2)scanf()函数使用“空白符”来决定怎样把输入分成几个字段。它依次把转换说明与字段相匹配,并跳过它们之间的空格(当格式控制符为%c时例外)。

    3)scanf遇到不匹配数据类型的数据时,ANSI C要求函数在第一个出错的地方停止读取输入。

    4)如果该函数使用%s转换说明符,那么除空白符以外的字符都是可以接受的

    5)unsigned型变量的输入格式,可以用%u%d%o%x格式。

    6)在用scanf函数对变量进行赋值时,一般不使用域宽m对格式进行修饰,以免发生错误。对于%d格式,如果指定了域宽,则从键盘上输入数据时,数据之间不加分隔符(如空格等),由系统按给定的域宽自动截取数据。

    7)如果在%后面、格式字符前面加上一个“*”附加说明符,表示跳过该输入,输入的数据不放入变量中。

    8)使用scanf函数对实型变量赋值时,在格式%f中加入域宽修饰符,其中小数点算一个域宽。

    9)使用scanf函数对实型变量进行赋值时,在格式%f中不得控制小数位的精度,但在printf函数中可以使用,并且经常使用。

    10)Scanf函数的“格式控制字符串”中一般不使用转义字符,否则要按原样在对应位置从键盘输入,为输入数据带来不必要的麻烦。

    三.

     

关键字