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 ...
随机推荐
- v7000数据恢复_MDisk重建数据恢复方法(北亚数据恢复)
很多工程师都有这样的疑问,MDisk重建后还能不能恢复数据呢?应该怎么做才能恢复数据呢?本文这里就以IBM V7000存储为例,详细讲解因为某个MDisk被重建导致的数据丢失的恢复方法.我们本案例中的 ...
- python全栈开发-hashlib模块(数据加密)、suprocess模块、xml模块
一.hashlib模块 1.什么叫hash:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 ...
- leetcode算法:Two Sum II - Input array is sorted
Given an array of integers that is already sorted in ascending order, find two numbers such that the ...
- Django admin 中抛出 'WSGIRequest' object has no attribute 'user'的错误
这是Django版本的问题,1.9之前,中间件的key为MIDDLEWARE_CLASSES, 1.9之后,为MIDDLEWARE.所以在开发环境和其他环境的版本不一致时,要特别小心,会有坑. 将se ...
- ActiveMQ学习系列(一)
一.JMS规范 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消 ...
- (第一章)对程序员来说CPU是什么
这几天,看到一本书,<程序是怎么跑起来的>,觉得之前都没有完整的看完一本书,现在要从这本书开始,慢慢的培养自己写读书笔记的习惯,不能度过去就忘了. 学习是一个螺旋上升的过程,不要指望一下子 ...
- Spark:将RDD[List[String,List[Person]]]中的List[Person]通过spark api保存为hdfs文件时一直出现not serializable task,没办法找到"spark自定义Kryo序列化输入输出API"
声明:本文转自<在Spark中自定义Kryo序列化输入输出API> 在Spark中内置支持两种系列化格式:(1).Java serialization:(2).Kryo seriali ...
- [Kaggle] dogs-vs-cats之制作数据集[1]
Step 0:导入必要的库 import tensorflow as tfimport os Step 1:获取图片文件名以及对应的标签 首先是读取给定路径下所有图片的名称以及对应的标签.os.lis ...
- urllib.parse.urlencode
urllib.request.urlopen(url,data,timeout) 其中如果data被赋值,则请求的方式就会由get转为post,而post需要提供一些待处理的数据. 这些待处理的数据需 ...
- JavaScript push() 方法
定义和用法: push() :可向数组的末尾添加一个或多个元素,并返回新的长度. 语法 arrayObject.push(newelement1,newelement2,....,newelement ...