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()的用法的更多相关文章

  1. scanf printf sprintf fprintf

    都是C语言中的函数,但C++保留了这些函数,在头文件iostream中声明了. 1 scanf(格式控制,输出列表) printf (格式控制,输出列表) 举例: #include <iostr ...

  2. printf,sprintf,fprintf的区别与联系

    在写代码过程中总会遇到printf和sprintf,既然这两个都遇到了,那么不妨再加一个fprintf吧. 他们三个都是将格式化字符串输出,区别就是他们输出的目标不一样. (1).printf,是把格 ...

  3. 进程操作篇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 ( ...

  4. fprintf, fscanf,printf,scanf使用时参数注意

    在利用fprintf函数将数据按格式输出到文件中时,通常需要限定数据的格式,例如: FILE *f=fopen("d:\\1.txt","w+"); int a ...

  5. php中sprintf与printf函数用法区别

    下面是一个示例:四舍五入保留小数点后两位  代码如下 复制代码 <?php$num1 = 21;echo sprintf("%0.2f",$num1)."<b ...

  6. PHP基础温习之echo print printf sprintf print_r var_dump的用法与区别

    一.echoecho() 实际上不是一个函数,是php语句,因此您无需对其使用括号.不过,如果您希望向 echo() 传递一个以上的参数,那么使用括号会发生解析错误.而且echo是返回void的,并不 ...

  7. [参考]C的scanf 和 C++的fscanf 的用法

    说明:本文不适合新手学习,适合用来做参考.本文参考有其他博客的内容,不过年代久远已经忘记了,在此感谢各位博主! scanf函数 用 法:int scanf(char *format[,argument ...

  8. 69.fprintf fscanf

    fprintf //从读文件中提取字符串到info1.user和info1.password中 fscanf(pfr, "%s%s", info1.user, info1.pass ...

  9. C语言sprintf和sscanf函数用法

    以前刚用C语言的时候,觉得字符串很难处理,后来用多了,发现其实并非如此,C语言也提供了许多函数给程序员使用.今天记录一下两个常用的两个字符串处理函数:sprintf和sscanf 1. sprintf ...

随机推荐

  1. 解决忽略VScode中Python插件pylint报错的问题

    pylint是VScode中python自带的插件,可以帮助代码规范,美观. 但是有些报错是你不想看到的,你可以选择性的忽略. 例如,在re.compile()中,可以添加参数re.S使. 匹配任意字 ...

  2. nodejs 全局变量

    1.全局对象 所有模块都可以调用 1)global:表示Node所在的全局环境,类似于浏览器中的window对象. 2)process:指向Node内置的process模块,允许开发者与当前进程互动. ...

  3. Linq 大合集

    static void Main(string[] args) { string[] words = { "zero", "one", "two&qu ...

  4. 使用Python3爬虫抓取网页来下载小说

    很多时候想看小说但是在网页上找不到资源,即使找到了资源也没有提供下载,小说当然是下载下来用手机看才爽快啦! 于是程序员的思维出来了,不能下载我就直接用爬虫把各个章节爬下来,存入一个txt文件中,这样, ...

  5. 阿里云API网关(5)用户指南(调用 API)

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  6. Python大婶博客汇总

    Python大神金星 博客:http://www.cnblogs.com/jin-xin/articles/7459977.html

  7. SOAPtest报错:error occurred during initialization of vm解决方法

    参考:http://forums.parasoft.com/index.php?act=ST&f=36&t=614 安装SOAPtest报错:error occurred during ...

  8. Python之日志 logging模块

    关于logging模块的日志功能 典型的日志记录的步骤是这样的: 创建logger 创建handler 定义formatter 给handler添加formatter 给logger添加handler ...

  9. 清除session信息

    session.removeAttribute("sessionname")是清除SESSION里的某个属性.     session.invalidate()是让SESSION失 ...

  10. semver(Semantic Versioning)

    Based on semver, you can use Hyphen Ranges X.Y.Z - A.B.C 1.2.3-2.3.4 Indicates >=1.2.3 <=2.3.4 ...