我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言scanf,fscanf和sscanf的区别

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言scanf,fscanf和sscanf的区别

一.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打印的,打印出来了:

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言scanf,fscanf和sscanf的区别

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

c语言scanf和printf有什么区别

scanf和printf是C语言中常用的输入输出函数。1. scanf函数:- 用于从标准输入(键盘)读取数据,并将其存储到指定的变量中。- 格式:`scanf("格式控制字符串", 变量地址1, 变量地址2, ...);`- 注意:在使用
2023-09-12

C语言中scanf和printf的区别有哪些

这篇文章将为大家详细讲解有关C语言中scanf和printf的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。区别:scanf是输入函数,用于从标准输入设备(一般是键盘)输入数据;而printf是
2023-06-14

c++中scanf和cin的区别

在 c++ 中,scanf 和 cin 都是用于读取输入的函数。scanf 使用格式化输入,而 cin 使用非格式化输入。scanf 要求指定数据的格式,而 cin 则不需要。scanf 在处理大量简单输入时更快,但可能存在安全漏洞,而 c
c++中scanf和cin的区别
2024-05-01

c++中cin和scanf的区别

c++中,cin和scanf都是用于读取输入的函数。它们的主要区别在于:输入方式(cin使用运算符重载,scanf使用格式化字符串和指针)、数据类型(cin只支持特定类型,scanf支持多种类型)、错误处理(cin触发异常,scanf返回错
c++中cin和scanf的区别
2024-04-28

c++和c语言的区别

区别:1、c++支持类、继承、多态等oop概念,而c语言本身并不直接支持oop;2、c++相对于c语言来说,引入了更多的新特性,例如函数重载、运算符重载、模板、异常处理等;3、c++标准库提供了丰富的功能,而c语言的标准库相对较小,功能较为
c++和c语言的区别
2024-03-14

c语言中\和/的区别

c 语言中,反斜杠 '\' 用于转义特殊字符,而正斜杠 '/' 用于表示除法运算符。此外,反斜杠还可用于注释、分隔文件路径和拼接字符常量。C 语言中 \ 和 / 的区别直接回答:C 语言中,'\'(反斜杠)和 '/'(正斜杠)是两种不同的
c语言中\和/的区别
2024-04-28

c语言中=和==的区别

c语言中 "=" 赋值,而 "==" 比较。 "=" 将右边的值赋给左边的变量,而 "==" 比较两个表达式的值,相等返回真,否则返回假。C语言中 = 和 == 的区别C语言中的赋值运算符 "=" 和比较运算符 "==" 是两个不同的运算
c语言中=和==的区别
2024-05-02

c语言中/和%的区别

c 语言中 '/' 和 '%' 运算符的不同:'/' 是除法运算符,用于计算商。'%' 是求模运算符,用于计算余数。除数必须为正整数,被除数可以为正负整数。c语言中 / 和 % 的区别在 C 语言中,'/' 和 '%' 是两个不同的运算符
c语言中/和%的区别
2024-04-27

c语言中|和||的区别

c语言中“|”和“||”的区别在于运算类型:“|”执行按位或运算,只有两个值都为真才为真;“||”执行逻辑或运算,只要有一个或两个值都为真就为真。C语言中的“|”和“||”区别C语言中,“|”和“||”都是逻辑运算符,它们用于对布尔表达式
c语言中|和||的区别
2024-05-02

c语言中,=和==的区别

c 语言中 "=" 赋值运算符用于将值分配给变量,而 "==" 相等比较运算符用于比较两个表达式的值是否相等,返回 true 表示相等,false 表示不相等。C 语言中 "=" 和 "==" 的区别在 C 语言中,"=" 和 "=="
c语言中,=和==的区别
2024-04-28

c语言和c++的区别和联系

c语言和c++是计算机科学领域应用广泛的编程语言。虽然它们有着相似的基础,但它们在语言类型、语法功能和内存管理方面存在着显著差异。c语言是一种面向过程的语言,而c++是一种面向对象的语言。c++扩展了c语言的类型系统,引入了引用、函数重载和
c语言和c++的区别和联系
2024-03-14

c语言中c和s的区别

"c" 和 "s" 是 c 语言的格式说明符,用于数据读写。"c" 针对单个字符,格式为 %c;"s" 针对以 '\0' 结尾的字符串,格式为 %s。C 和 S 在 C 语言中的区别"c" 和 "s" 在 C 语言中表示 格式说明符,用于
c语言中c和s的区别
2024-05-12

c#和c语言和c++的区别大吗

c++kquote>c#、c语言和c++语言的主要区别在于:c#面向对象,而c语言和c++面向过程;c#内存管理简单,由垃圾回收器负责,c语言和c++则需要手动管理内存。C#、C 语言和 C++ 之间的区别核心区别C#、C 语言和 C+
c#和c语言和c++的区别大吗
2024-04-04

c语言和python区别

c语言和python是两种截然不同的编程语言,各具特色和应用场景。c语言作为编译型、面向过程的语言,在底层系统编程和性能要求高的领域表现出色。python作为解释型、面向对象的语言,凭借简洁易懂的语法和丰富的库,在数据分析、人工智能和web
c语言和python区别
2024-03-14

c语言和c++的区别在哪

c++kquote>主要区别:c++ 面向对象,支持类、继承和多态;c 为过程化语言。c++ 支持数据抽象,隐藏数据和方法;c 中数据和操作公开。c++ 自动内存管理,对象超出作用域时自动释放内存;c 需要手动管理内存。c++ 支持泛型编程
c语言和c++的区别在哪
2024-04-04

c语言中s和c的区别

字符串常量 (s) 和字符常量 (c) 的区别在于:1. s 用双引号表示字符串,而 c 用单引号表示单个字符;2. s 存储在只读内存中,而 c 存储在可读写内存中;3. s 可以比较,而 c 只能与其他 c 比较。C 语言中 s 和 c
c语言中s和c的区别
2024-04-30

c#语言和c的区别在哪

c# 和 c 语言的不同之处在于:类型系统:c# 类型安全,c 类型不安全。垃圾收集:c# 自动垃圾收集,c 需要手动管理内存。安全性:c# 有内置安全机制,c 没有。语法:c# 类似 java,c 语法更简洁。用途:c# 用于游戏、商业应
c#语言和c的区别在哪
2024-04-04

c语言中的%和/的区别

在 c 语言中,% 为取模运算符,返回两个操作数相除的余数;/ 为除法运算符,返回两个操作数相除的结果。取模运算返回余数(int 型),而除法运算返回商(浮点型);两个操作数皆为整数时,/ 会进行整数除法,可能导致精度丢失;浮点型操作数时,
c语言中的%和/的区别
2024-04-28

c语言和c++有区别吗?

c++kquote>是的,c 语言和 c++ 之间存在关键区别:c++ 支持面向对象的类和对象,而 c 则不支持。c++ 具有严格的数据封装和访问控制,而 c 没有。c++ 具有命名空间,而 c 没有。c++ 支持泛型编程,而 c 不支持。
c语言和c++有区别吗?
2024-04-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录