【C语言】scanf,fscanf和sscanf的区别

4 篇文章 0 订阅
订阅专栏

在使用c语言的过程中,我们经常会用到scanfprintf,那么对于对于下面几个类似的函数,有什么区别呢?

一.scanf,fscanf和sscanf

1.scanf

首先scanf我们的很熟悉,他就是从键盘上输入数据,准确的来说就是:

从标准输入(键盘)读取格式化的数据。

int main()
{

	int x = 0;
	scanf("%d", &x);

	return 0;
}

2.fscanf

fscanf就比scanf高级了一点,可以说是fscanf包含了scanf的功能,对于这个函数的定义是这样子的:

从所有的输入流读取格式化的数据。

我们可以查看一下 fscanf-cpulspuls中的解释和参数:

释义:从流中读取数据,并根据参数格式将它们存储到附加参数所指向的位置。附加参数应指向格式字符串中的相应格式说明符指定的类型已分配的对象。

int fscanf ( FILE * stream, const char * format, ... );

这里的参数如果看不懂,我们就可以进行对比去学习,我们可以打开scanf的说明去看一下对比一下:

实际上fscanf就多了一个FILE * 的参数,也就是打开的文件的地址参数,所有当我们进行使用的时候,我们可以先像scanf一样写出来,然后再在前面加上一个FILE * 的参数就好了。

例子:
我们可以打开文件,在输入流中读取到数据,然后打印出来看看:

//fscanf
struct S
{
	int n;
	double d;
};
int main()
{
	struct S s = {0};
	FILE* pf = fopen("data.txt", "r");//文本文件data.txt
	if (NULL == pf)
	{
		perror("fopen");
		return -1;
	}
	//读文件
	fscanf(pf, "%d %lf", &(s.n), &(s.d));

	printf("%d %lf\n", s.n, s.d);

	//关闭文件
	fclose(pf);
	pf = NULL;
}

3.sscanf

老规矩,我们查一下这个函数的定义:

这里的意思就是从字符串中读取到格式化的数据,也就是说我们输入进去的数据,sscanf会转化成字符串的形式。也就是:

从字符串中读取一个格式化的数据。

int sscanf ( const char * s, const char * format, ...);

而对于参数我们可以再对比一下,前面的fscanf就是多了一个FILE *的指针,而现在这里就是改成了字符指针,也就是从字符指针中读一个数据,到后面的格式化数据里面去。

例子:

从字符数组里面拿数据进结构体,然后打印出来(这里要先理解下面的sprintf然后一起看):

struct S
{
	int n;
	double d;
	char name[10];
};

int main()
{
	char arr[100] = { 0 };

	struct S tmp = { 0 };
	struct S s = { 100, 3.14, "zhangsan" };
	//把一个格式化的数据转换成字符串
	sprintf(arr, "%d %lf %s", s.n, s.d, s.name);
	//打印
	printf("%s\n", arr);
	
	//从arr中的字符串中提取出一个格式化的数据
	sscanf(arr, "%d %lf %s", &(tmp.n), &(tmp.d), tmp.name);
	//打印
	printf("%d %lf %s\n", tmp.n, tmp.d, tmp.name);

	return 0;
}

二.printf,fprintf和sprintf

1.printf

printf就是一个打印函数,从键盘上输出,对于它来说就是:

把格式化的数据到标准输出(屏幕)上

int main()
{

	int x = 0;

	printf("%d", x);
	return 0;
}

2.fprintf

fprintf同样是比printf高级一点,它可以输出到更多的地方,也就是包括着printf的功能,他的定义是:

把格式化的数据输出到所有输出流(屏幕/文件)上

同样的我们可以先查一下 fprintf - cplusplus:

释义:将按格式指向的C字符串写入流。如果格式包括格式说明符(从%开始的子序列),则格式化后的附加参数将被格式化并插入到结果字符串中,替换各自的说明符。

int fprintf ( FILE * stream, const char * format, ... );

同样经过对比之后,我们发现fprintf和printf也就是差了一个FILE *的参数,所以我们同样可以先按照printf的格式写,然后再加上参数,就可以很好的使用fprintf了。

例子:
这里将一些值输出到文件上,也就是当我们运行完代码之后,文件上就会拥有这些数据:

//fprintf(按某一种格式写入)
struct S
{
	int n;
	double d;
};

int main()
{
	struct S s = { 100, 3.14 };

	FILE* pf = fopen("data.txt", "w");//写入文本文件data.txt
	if (NULL == pf)
	{
		perror("fopen");
		return -1;
	}
	//写文件
	fprintf(pf, "%d %lf", s.n, s.d);

	//关闭文件
	fclose(pf);
	pf = NULL;
}

3.sprintf

对于ssprintf,还是先看定义:

释义:在printf上使用格式时,使用相同的文本组成字符串,但内容不是打印出来,而是存储在str指向的缓冲区中的C字符串中。

实际上这里的意思就是:

把格式化的数据输出转换成字符串。

int sprintf ( char * str, const char * format, ... );

而对于这个函数参数,我们参照printf转换发现,这里就是多了一个字符指针,也就是从后面的输出的格式化中读数据,到前面的字符指针里面去。然后输出得到的就是字符串。

例子:

打印结构体的多种类型的数据:

struct S
{
	int n;
	double d;
	char name[10];
};

int main()
{
	char arr[100] = { 0 };

	struct S tmp = { 0 };
	struct S s = { 100, 3.14, "zhangsan" };
	
	//把一个格式化的数据转换成字符串
	sprintf(arr, "%d %lf %s", s.n, s.d, s.name);
	//打印
	printf("%s\n", arr);
    return 0;
}

我们以%s打印的,打印出来了:

本篇文章就到这里,如果感觉对你有帮助,不妨点个赞。

字符串输入函数scanf( )与sscanf( )的区别
qq_64797754的博客
08-09 982
sscanfscanf区别scanf是以键盘作为输入源,sscanf是以字符串作为输入源。 注意:如果第一个字符匹配失败就会结束匹配,所以需要适当过滤操作 ; 如果开头是空格或\n等字符,会直接跳过这些空白字符;...
C语言scanf/fscanf/sscanf printf/fprintf/sprintf 函数对比
mlisda的博客
01-16 1032
scanf/fscanf/sscanf printf/fprintf/sprintf
sscanfscanf
话别深秋
10-05 2018
 sscanf  名称:  sscanf() - 从一个字符串中读进与指定格式相符的数据.   函数原型:  Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );  int scanf( const char *format [,argument]... );   说明:  sscanf
C语言fscanf 和 fprintf (文件顺序读写)
最新发布
tianxiawushanu的博客
08-01 1542
本文将会讲解fscanf函数以及fprintf函数,还会讲解scanf / fscanf / sscanf之间的区别以及printf / fprintf / sprintf之间差异。
sscanf,sprintf,fscanf,fprintf 系列函数的用法小结
peizhiinfo
08-11 176
sscanf: sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: Int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *format [,argument]... ); 说明: sscanfscanf类似,都是用于输入的,只是后者以屏幕...
scanf[^\n]/fscanf 的%[]和%n使用方法
aaaa255116的博客
10-22 2327
标准输入输出函数%[]和%n说明符的使用方法    scanf fscanf,均从第一个非空格的可显示字符开始读起!         标准输入输出函数scanf具有相对较多的转换说明符,它常常作为入门级函数出现在各种教材中。但奇怪的是,[]和n这两种都为c89/c99所规定的标准说明符却鲜少在大多数教材中出现。虽然[]和n说明符的使用频率不及其它说明符,但两者在程序设计中的作用仍然不可小视,尤
C语言sscanffscanfscanf和sprintf、fprintf、printf函数的区别与相似分析
2301_80038635的博客
01-25 1523
实际上fscanf就多了一个FILE * 的参数,也就是打开的文件的地址参数,所有当我们进行使用的时候,我们可以先像scanf一样写出来,然后再在前面加上一个FILE * 的参数就好了。而对于参数我们可以再对比一下,前面的fscanf就是多了一个FILE *的指针,而现在这里就是改成了字符指针,也就是从字符指针中读一个数据,到后面的格式化数据里面去。而对于这个函数参数,我们参照printf转换发现,这里就是多了一个字符指针,也就是从后面的输出的格式化中读数据,到前面的字符指针里面去。
c语言 sscanfscanffscanf正则表达式用法
12-26
每种语言都对正则表达式有着不同程度的支持,在C语言中,有输入功能的这三个函数对正则表达式的支持并不强大,但是我们还是有必要了解一下。 首先来看看他们的原型: #include int scanf(const char *format, ...)...
C语言--三组输入输出函数对比(scanf/fscanf/sscanf、printf/fprintf/sprintf)
羟基与苯的博客
04-05 557
文章目录前言1. scanf 和 printf 函数2. fscanf 和 fprintf 函数2.1 fprintf函数2.2 fscanf函数3. sscanf 和 sprintf 函数总结 前言 在C语言中有这么三组输入输出函数,分别是: scanf和printf、fscanf和fprintf、sscanf和sprintf 这三组函数都有着输入输出的功能,但它们的区别在哪里呢? 下面分别来介绍: 1. scanf 和 printf 函数 函数原型: int scanf( const char *fo
C语言scanf多余的输入项,聊聊C语言scanf()如何解决输入缓冲区残留‘/n’的有关问题...
weixin_29716207的博客
05-19 1109
聊聊C语言scanf()怎么解决输入缓冲区残留‘/n’的问题聊聊C语言scanf()怎么解决输入缓冲区残留‘/n’的问题因为scanf%c只是读入一个字符,而你在输入时实际上输入的是:某个字符+Enter,Enter产生的\n也会停留在输入缓冲区中,下次调用scanf%c时就会直接读到它而不是等待你再次输入!#includeintmain(void){intn=0;c...
C语言scanf和sscanf,sscanf函数于scanf函数的区别
weixin_39966765的博客
05-25 790
sscanfscanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。sscanf可以实现更丰富的功能,最起眼的应该是类似于正则表达式的功能:第一个参数可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了...
浅析C语言中printf(),sprintf(),scanf(),sscanf()的用法和区别
09-05
以下是对C语言中printf(),sprintf(),scanf(),sscanf()的用法以及区别进行了详细的分析介绍,需要的朋友可以参考下
C语言scanf()和sscanf()函数详解
Flin
10-06 1874
sscanf()与scanf()类似,都是用于输入的,只是scanf()以键盘(stdin)为输入源,sscanf()以固定字符串为输入源 一:scanf() 头文件: #include <stdio.h> 函数原型: int scanf(const char *format,...); 函数功能:按指定格式从键盘输入数据,存入地址表指定的存储单元中,并按回车键结束。 函数参数:format 指定输入格式,后面跟要输入的变量的地址表,为不定参,用"..."表示。 函数返回.
sscanfscanf
weixin_42388551的博客
07-26 1357
下面总结了sscanf的以及sscanf_s的常用方法,也体现了“_s”版本函数与原函数的特别之处: 1、sscanfscanf的不同是输入来源,前者是一个字符串,后者则是标准输入设备 2、sscanf的使用,以解析时间字符串为例,将字符串“2009-01-02_11:12:13”解析为整型年月日时分秒 //定义 char cc; tm tm_temp={0}; string stime(“20...
“深入了解C语言中的输入函数:scanffscanf和sscanf
qq_67411584的博客
04-15 2365
我们深入了解了 scanf 函数在 C 编程语言中的作用和用法。我们知道,scanf 函数通过格式字符串来指定要读取的数据类型和格式,它可以读取整数、浮点数、字符串等多种数据类型。同时,我们也学习了如何使用 fscanf 和 sscanf 函数来从文件流和字符串中读取格式化输入。将有助于我们在编程过程中更有效地处理用户输入和文件读取操作。
C语言中printf(),sprintf(),scanf(),sscanf()的用法和区别
~探路者~的博客
07-27 727
printf语法:#include <stdio.h> int printf( const char *format, ... );printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中。返回值是输出的字符数量。sprintf语法: #include <stdio.h> int sprintf( char *buffer, const char *f
scanf,fscanf,sscanf区别----整理
weixin_30407613的博客
02-01 121
转自原文 scanf,fscanf,sscanf区别----整理 scanf 从控制台输入 fscanf 从文件输入 sscanf 从指定字符串输入 1、例:使用scanf函数输入数据。 #include<stdio.h> int main() { int a,b,c; printf("输入 a, b, c\n"); ...
scanffscanf与sscanf
BUILD
05-27 3150
函数原型 int scanf(const char *format, ...); int fscanf(FILE *stream, const char *format, ...); int sscanf(const char *str, const char *format, ...); 相同点是,按照format指定的格式给读取字符串类型变量的值,然后给数值型变量进行赋值。 不同点是,sc
sscanfscanf区别
海涛高软
04-24 221
在使用sscanf函数时,要确保格式字符串与要解析的数据格式匹配,否则可能会导致解析错误或未定义的行为。sscandf 从字符串中提取数据。scanf 标准输入流读取数据。
sscanfscanffscanf
09-27
scanffscanf和sscanf都是C语言中用于输入格式化数据的函数。 scanf函数用于从标准输入流(通常是键盘)读取数据。它可以根据指定的格式字符串,将输入的数据转换为相应的数据类型,并存储到指定的变量中。例如,scanf("%d", &num)可以将输入的整数存储到变量num中。 fscanf函数与scanf函数类似,但它从文件流中读取数据,而不是从标准输入流。通过传入文件指针作为第一个参数,我们可以从文件中读取数据并进行格式化处理。 sscanf函数与scanf函数类似,但它从一个字符串中读取数据,而不是从输入流中读取。通过传入字符串作为第一个参数,我们可以从字符串中读取数据并进行格式化处理。 使用scanffscanf和sscanf函数可以使我们的数据输入更加灵活。不再局限于从键盘输入,可以从文件或字符串中读取数据。
写文章

热门文章

  • 【IDEA】IDEA怎么汉化&汉化后怎么转回英文 37912
  • 【创建FTP】如何在内网创建属于自己的FTP 23247
  • 【MySQL】MySQL表之联合查询(多表查询) 16746
  • 【MySQL】修改MySQL中的编码方式 11637
  • 【C语言】scanf,fscanf和sscanf的区别 6181

分类专栏

  • 小知识 2篇
  • C语言小知识点 4篇
  • 每日一题 9篇
  • MySQL 11篇
  • 我的 2篇
  • Java杂物间 6篇
  • c语言题库 3篇
  • C语言进阶 10篇
  • C语言基础 6篇
  • Java SE 21篇
  • JAVA数据结构 2篇
  • C语言有趣系列 4篇
  • 链表OJ面试题(Java实现) 5篇

最新评论

  • 【MySQL】如何速通MySQL(3)

    ╭莣记ㄚОㄩ: 通俗易懂,适合小白

  • 【C语言】scanf,fscanf和sscanf的区别

    尹子南路: 这几个函数使用过后指针位置怎么变化

  • 【Java集合与数据结构】篇2 泛型与包装类基础

    m0_73517545: 感谢!写得好认真,对小白很有用表情包

  • 【C语言】scanf,fscanf和sscanf的区别

    没事多喝水zz: 写的好清楚,厉害的!

  • 【IDEA】IDEA怎么汉化&汉化后怎么转回英文

    玛卡巴卡又想干饭了: Plugin "Chinese (Simplified) Language Pack / 中文语言包" was not installed: Invalid filename returned by a server 这个错误咋办啊

最新文章

  • 【MySQL】如何速通MySQL(4)
  • 【MySQL】如何速通MySQL(3)
  • 【MySQL】如何速通MySQL(2)
2023年4篇
2022年25篇
2021年56篇

目录

目录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恒等于C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家玻璃钢雕塑 模具湖北玻璃钢雕塑供应天津美诺玻璃钢雕塑制作玻璃钢雕塑的保质期广东节庆商场美陈哪家好都江堰玻璃钢造型雕塑南昌玻璃钢人物雕塑定制江苏玻璃钢雕塑介绍玻璃钢瓜果雕塑厂南阳镇平玻璃钢小品雕塑深圳玻璃钢花盆定做四川中庭商场美陈研发公司玻璃钢动物雕塑尺寸台州商场美陈费用乐山广场玻璃钢雕塑玻璃钢吉祥物雕塑商场春天美陈装饰衢州环保玻璃钢雕塑制作莆田玻璃钢人物雕塑价格玻璃钢公园雕塑采购蒂芙尼蓝色商场美陈卡通形象玻璃钢雕塑安徽玻璃钢造型雕塑淮南玻璃钢仿铜雕塑价格商场圣诞节创意美陈河南仿真玻璃钢雕塑珠海玻璃钢雕塑工厂高强度玻璃钢雕塑哪里卖深州玻璃钢雕塑安庆景观玻璃钢花盆香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化