C的IO操作和数据格式化函数(三)
时间:2010-10-14 来源:houbangen
三.
文件内容格式化函数
fprintf( )
定义函数 int fprintf ( FILE * stream , const char * format , arg1 , arg2 .........);
说明
将内存中的各类型数据arg1、arg2等,依次按格式字符串的格式转换字符转变为显示形式的字符串A,然后将字符串A写入到到stream指定的文件中,直到字符串A遇到’ \ 0 ’字符为止。
stream可为磁盘文件创建的,也可为stdin 或 stdout .
关于参数format格式字符串的格式请参考printf( )。
返回值
成功,则返回实际输出的字符数;
失败,则返回-1,错误原因存于errno中。
fscanf( )
int fscanf (FILE * stream , const char * format , lparg1 , lparg2 , .......);
将从stream指向的文件流中的字节序列,由字节序列中的空格字符、TAB字符、回车换行符划分为子字节序列 ,对应于参数format字符串中的转换格式字符来转换成内存类型数据,存于指定的各内存空间。
stream可为磁盘文件创建的,也可为stdin 或 stdout .
参数
format格式字符串参考 sscanf( )
返回值
成功,则返回参数数目;
失败则返回-1,错误原因存于errno中。
输入/输出格式化函数
printf
int printf ( const char *format , arg1 , arg2 , …) ;
说明:将内存中的各类型数据arg1、arg2等,依次按格式字符串的格式转换字符转变为显示形式的字符串A,然后将字符串A输出到标志输出,直到遇到’ \ 0 ’字符为止。
每个格式字符串其后都必需有一参数arg与之相对应,且欲转换的数据类型必须与其相对应的转换字符类型相同。
参数:
format 为格式字符串 。
format可包含的字符类型:1. 直接输出的一般文字;2. 转义字符 ;3. 格式转换字符 。
arg1 、arg2 …. 是内存数据变量名。
格式字符形式: % [Flags] [Width] [.Prec] [ F | N | h | l ] Type
说明:
① Type :
整数
%d 有符号整数类型的内存参数会被转成十进制显示形式的数字字符串;
%u 无符号整数类型的内存参数会被转成十进制显示形式的数字字符串;
%o 无符号整数类型的内存参数会被转成八进制显示形式的数字字符串;(o是字母o , 不是数字0)
%x 无符号整数类型的内存参数会被转成小写表示的十六进制显示形式数字字符串;
%X 无符号整数类型的内存参数会被转成大写表示的十六进制显示形式数字字符串;
浮点数
%f double类型的内存参数被转成十进制显示形式的数字字符串,并四舍五入取到小数点右边六位数(不足6位用零补充)。
%e double类型的内存参数被转成指数形式的显示形式数字字符串:有一个非零数字在小数点前,六位数字在小数点后,而在指数部分会以小写的e来表示。如: 值为36556.546的浮点数被显示表示为 3.655655e+004
%E 与%e作用相同,唯一区别是指数部分将以大写的E 来表示。
%g double类型的内存参数被转成最大有效数字位数为6的数字字符串,根据需要自动选择正常显示形式或科学计数的显示形式。
%G 与%g 作用相同,唯一区别在以指数形态打印时会选择%E 格式。
字符及字符串
%c 整数类型的内存参数被转成ASCII码值的字符。
%s 不进行转换,将指向的内存空间的数据按一个字符接一个字符逐字输出,直到出现’ \ 0 ’字符为止;
%p 如果是参数是“void *”型指针则使用十六进制格式显示。
② F | N | h | l
F ,far指针 ,表示为:XXXX : YYYY ;
n ,near指针 ,表示为:XXXX ;
h ,短整数或单精度浮点数 ;
l ,长整数或双精度浮点数。
③ Prec
用于指定显示形式字符串的长度:
1. 指定正整数类型转换出的显示形式的字符串的最小字符数 ;
2. 指定浮点类型转换出的显示形式的字符串的小数部分的字符数(即小数点位数);
3. 指定在%g 格式代表有效位数的最大值。
4. 对字符串类型参数,指定显示形式字符串的最大字符数。
5. 若为 * 符号,则代表下个参数arg的值为该格式转换符中的prec 。(有待认证)
④ Width
用于设定转换成的显示形式字符串的最小字符数;
若此栏是*符号,则表示以下一个参数arg的值数为该格式转换符中的Width 。(有待认证)
⑤ Flags 可以为多个值,如:+#
- 将显示形式字符串向左对齐,默认为右对齐。
+ 在转换负数时,在显示形式字符串中添加一个负号;
# 当在转换的参数类型为o(如%#o)时,则会在打印八进制数值前多印一个数字 ’0’;
而在转换的参数类型为x(%#x)时,则会在打印十六进制数前多印 ’0x’;
在型态为e、E、f、g或G 之前则会强迫数值打印小数点。
在类型为g 或G之前时则同时保留小数点及小数位数末尾的零。
0 宽度不够时,用零来填补 。默认此旗标是关闭的,所以打印空格字符。
返回值:
成功,则返回实际输出的字符数;
失败则返回-1,错误原因存于errno中。
(当%%出现时,直接输出%字符)
scanf
sacnf(格式化字符串输入)
定义函数 int scanf(const char * format , lparg1 , lparg2 , .......);
说明
将来自键盘输入的字节序列,由字节序列中的空格字符、TAB字符、回车换行符划分为子字节序列 ,对应于参数format字符串中的转换格式字符来转换成内存类型数据,存于指定的各内存空间。
参数
lparg1 、lparg2 …… 是存在转换后数据的内存地址。
scanf()的格式转换符的一般形式如下
% [*] [Size] [l] [h] Type
* 表示该转换后的数据不保存到对应的的参数指定空间,即忽略进行保存。
Size 提取子字节序列中的前size个字节用于转换,剩余的忽略。
l 转换成long int 型整数或double型浮点数保存。
h 转换成short int 型整数保存。
Type:
%d 将子字节序列被转换成有符号的int 型整数 。
%u 将子字节序列被转换成无符号的int 型整数 。
%i 将子字节序列被转成有符号的int 型整数,
若子字节序列,是以“0x”或“0X”开头的,则表把十六进制的显示形式字符序列转换成整型数,
若子字节序列,是以“0”开头的,则表把八进制的显示形式字符序列转换成整型数,其他情况代表八进制的显示形式字符序列。
%0 将八进制显示形式的子字符序列转成无符号整型数。
%x 将八进制显示形式的子字符序列转成无符号整型数。
%X 同%x
%f 将子字节序列被转成有符号的浮点型数。
%e 同%f
%E 同%f
%g 同%f
%s 输入数据为以 ’ \ 0 ’ 字符结尾的字符串。
%c 输入数据为一个字符。
[ ] 读取子字符序列中的字符直到碰到不是括号内的字符则终止读取。如[a-z] [asdf]。
[^] 读取子字符序列中的字符,当读到中括号^符号后的字符时则终止读取如[^0-9] [^asd].
返回值
成功,则返回参数数目;
失败则返回-1,错误原因存于errno中。
sprintf (格式化内存类型数据后复制到指定内存空间)
定义函数 int sprintf( char *str , const char * format , arg1 , arg2 .........);
说明
将内存中的各类型数据arg1、arg2等,依次按格式字符串的格式转换字符转变为显示形式的字符串A,然后将字符串A赋到str指向的字符内存空间,直到字符串A遇到’ \ 0 ’字符为止。
关于参数format格式字符串的格式请参考printf( )。
返回值
成功,则返回参数str字符串长度;
失败,则返回-1,错误原因存于errno中。
sscanf
定义函数
int sscanf (char *str , const char * format , lparg1 , lparg2 ......... ) ;
说明
将来自str指向的内存存储的字节序列,由字节序列中的空格字符、TAB字符、回车换行符划分为子字节序列 ,对应于参数format字符串中的转换格式字符来转换成内存类型数据,存于指定的各内存空间。
参数
format格式字符串参考 sscanf( )