sprintf()、fprintf()、fscanf()的用法
sprintf函数的用法
1、该函数包含在stdio.h的头文件中。
2、sprintf和平时我们常用的printf函数的功能很相似。sprintf函数打印到字符串中,而printf函数打印输出到屏幕上。sprintf函数在我们完成其他数据类型转换成字符串类型的操作中应用广泛。
3、sprintf函数的格式:
int sprintf( char *buffer, const char *format [, argument,...] );
除了前两个参数固定外,可选参数可以是任意个。buffer是字符数组名;format是格式化字符串(像:"%3d%6.2f%#x%o",%与#合用时,自动在十六进制数前面加上0x)。只要在printf中可以使用的格式化字符串,在sprintf都可以使用。其中的格式化字符串是此函数的精华。
4、char str[20];
double f=14.309948;
sprintf(str,"%6.2f",f);
可以控制精度。
5、char str[20];
int a=20984,b=48090;
sprintf(str,"%3d%6d",a,b);
str[]="20984 48090"
可以将多个数值数据连接起来。
6、char str[20];
char s1[5]={'A','B','C'};
char s2[5]={'T','Y','x'};
sprintf(str,"%.3s%.3s",s1,s2);
可以将多个字符串连接成字符串
%m.n在字符串的输出中,m表示宽度,字符串共占的列数;n表示实际的字符数。%m.n在浮点数中,m也表示宽度;n表示小数的位数。
7、可以动态指定,需要截取的字符数
char s1={'A','B','C'};
char s2={'T','Y','x'};
sprintf(str,"%.*s%.*s",2,s1,3,s2);
sprintf(s, "%*.*f", 10, 2, 3.1415926);
8、sprintf(s, "%p", &i);
可以打印出i的地址
上面的语句相当于
sprintf(s, "%0*x", 2 * sizeof(void *), &i);
9、sprintf的返回值是字符数组中字符的个数,即字符串的长度,不用在调用strlen(s)求字符串的长度。
原文传送门:请点击
fprintf、fscanf的读写对象不是终端而是磁盘文件。
调用方式为:int fprintf(文件指针,格式字符串,输出表列 )返回值:返回实际输出的字符数,操作不成功返回EOF。
int fscanf(文件指针,格式字符串,输入表列 )返回值:返回输入的数据个数,操作不成功返回EOF。
fprintf(fp, "%d, %6.2f", i, t)将整型变量 i 和实型变量 t 的值按%d和%6.2f的格式输出到fp所指向的文件中;若i=3,t=4.5,则输出到磁盘中的格式为:3, 4.50。相应的,从文件中读取数据时,则应用:fscanf(fp, "%d, %f", &i, &t)。
在运用fprintf与fscanf时,在向文件输出数据及从文件读取数据时,分隔符应该相一致。如下程序所示,该程序的功能是:用户输入8个整型数据,程序回显并把数据写到int.txt文件中,然后程序再从int.txt文件中读取数据,并显示出来。
#include <stdio.h>
main()
{
FILE *fp;
int i,ss[],new[];
for(i=;i<;i++){
scanf("%d",&ss[i]);
}
fp=fopen("int.txt","w");
printf("start diesplay old data!/n");
for(i=;i<;i++){
printf("%d:%-10d/n",i+,ss[i]);
fprintf(fp,"%d,",ss[i]); /*输出数据时以逗号为数据之间的分隔符*/
}
fclose(fp);
printf("Now diseplay read date!/n");
if((fp=fopen("int.txt","r"))==NULL) return ;
for(i=;i<;i++){
fscanf(fp,"%d,",&new[i]); /*输入数据时以逗号为数据之间的分隔符,这样做到前后一致, 读取数据不会错*/ printf("%d:%-10d/n",i+,new[i]);
}
fclose(fp);
}
分隔符也可采用/n,即回车符,那么程序中二句相应改为:
fprintf(fp,"%d/n",ss[i]);
fscanf(fp,"%d/n",&new[i]);
使用fprintf和fscanf的优点:
使用fread和fwrite的优点就是二进制的读取是最快的。但是它们有缺陷,就是在读取的时候 while(!feof(fp)) 不精确,往往会发现它多循环了一次。因为feof()是根据剩余字符来判断是否文件结尾的,而文件的结尾标识符是'/0'是两个字节,在读取'/'的时候feof()还是为false只有读取完'/0'的时候feof()==true。致使产生多余的循环(如果使用while(!feof(fp))的话)。使用fprintf和fscanf,因为这两个函数具有输入/输出的格式限制,即使在读取'/0'处有多余的循环,但由于其不满足输入/输出格式,所以多余的循环被屏蔽掉。最好就是这样:"%d/t%d/t" 这样的每个数字后面都是有限制的,这样就可以起到很好的屏蔽作用。^^
对文件的读和写是最常用的文件操作。在C语言中提供了多种文件读写的函数:
·字符读写函数 :fgetc和fputc
·字符串读写函数:fgets和fputs
·数据块读写函数:fread和fwrite
·格式化读写函数:fscanf和fprinf
随着每次数据的读取,文件流指针fp都作相应的移动
参考原文:https://blog.csdn.net/sdhfll/article/details/1892926
sprintf()、fprintf()、fscanf()的用法的更多相关文章
- scanf printf sprintf fprintf
都是C语言中的函数,但C++保留了这些函数,在头文件iostream中声明了. 1 scanf(格式控制,输出列表) printf (格式控制,输出列表) 举例: #include <iostr ...
- printf,sprintf,fprintf的区别与联系
在写代码过程中总会遇到printf和sprintf,既然这两个都遇到了,那么不妨再加一个fprintf吧. 他们三个都是将格式化字符串输出,区别就是他们输出的目标不一样. (1).printf,是把格 ...
- 进程操作篇atexit execl exit fprintf fscanf getpid nice get priority printf setpid system vfork wait waitpid
atexit(设置程序正常结束前调用的函数) 相关函数 _exit,exit,on_exit 表头文件 #include<stdlib.h> 定义函数 int atexit (void ( ...
- fprintf, fscanf,printf,scanf使用时参数注意
在利用fprintf函数将数据按格式输出到文件中时,通常需要限定数据的格式,例如: FILE *f=fopen("d:\\1.txt","w+"); int a ...
- php中sprintf与printf函数用法区别
下面是一个示例:四舍五入保留小数点后两位 代码如下 复制代码 <?php$num1 = 21;echo sprintf("%0.2f",$num1)."<b ...
- PHP基础温习之echo print printf sprintf print_r var_dump的用法与区别
一.echoecho() 实际上不是一个函数,是php语句,因此您无需对其使用括号.不过,如果您希望向 echo() 传递一个以上的参数,那么使用括号会发生解析错误.而且echo是返回void的,并不 ...
- [参考]C的scanf 和 C++的fscanf 的用法
说明:本文不适合新手学习,适合用来做参考.本文参考有其他博客的内容,不过年代久远已经忘记了,在此感谢各位博主! scanf函数 用 法:int scanf(char *format[,argument ...
- 69.fprintf fscanf
fprintf //从读文件中提取字符串到info1.user和info1.password中 fscanf(pfr, "%s%s", info1.user, info1.pass ...
- C语言sprintf和sscanf函数用法
以前刚用C语言的时候,觉得字符串很难处理,后来用多了,发现其实并非如此,C语言也提供了许多函数给程序员使用.今天记录一下两个常用的两个字符串处理函数:sprintf和sscanf 1. sprintf ...
随机推荐
- Raid5两块硬盘掉线可以恢复数据吗_raid数据恢复案例分享
本案例中发生故障的存储类型是HP P2000,虚拟化平台为vmware exsi,共有10块硬盘组成raid5(硬盘容量为1t,其中6号盘是热备盘),由于某些故障导致阵列中两块硬盘亮黄灯掉线,硬盘无法 ...
- MySQL搭建主从数据库 实现读写分离
首先声明,实际生产中,网站为了提高用户体验,性能等,将数据库实现读写分离是有必要的,我们让主数据库去写入数据,然后当用户查询的时候,然后在从数据库读取数据,故能减轻数据库的压力,实现良好的用户体验! ...
- JAVA_SE基础——70.Math类
package cn.itcast.other; /* Math 数学类, 主要是提供了很多的数学公式. abs(double a) 获取绝对值 ceil(double a) 向上取整 ...
- MySQL“Another MySQL daemon already running with the same unix socket” 报错信息处理
Mysql "Another Mysql daemon already running with the same unix socket" 解决办法:rm var/lib/mys ...
- WPF treeview扩展
记录一下工作中遇到的问题,以便以后忘记了可以来看. 在工作中遇到一个问题,就是要实现类型如下的界面,没有使用Telerik和Dev库.本来最开始是想使用Datagrid,但不知道怎么实现treevie ...
- MySQL一些中重要命令
前言: 最近在面试的过程中,深感对MySQL一些重要命令的缺失.借着这个机会,补补这块的知识.不让自己只会增删查改,懂一些高级的东西 limit 用法 order by 用法 in 和 between ...
- maven入门(1-1)maven是什么?
Maven是一个项目管理工具,它包含了 一个项目对象模型 (Project Object Model), 一组标准集合, 一个项目生命周期(Project Lifecycle), 一个依赖管理系统(D ...
- 从Mybatis源码理解jdk动态代理默认调用invoke方法
一.背景最近在工作之余,把开mybatis的源码看了下,决定自己手写个简单版的.实现核心的功能即可.写完之后,执行了一下,正巧在mybatis对Mapper接口的动态代理这个核心代码这边发现一个问题. ...
- 其实你并不懂如何定义一个 PHP 函数
<?php function divide($dividend, $divisor){ return $dividend / $divisor; } echo divide(12, 4); ec ...
- 一次完败的Release
一次完败的Release 去年8月份加入一家创业公司,和原同事做VR相关的产品开发,到18年正月初七,总共release过两次,真正经理了一次从0到1的过程.第一次release产品初步成型,大概在1 ...