千家信息网

C语言scanf,fscanf和sscanf有哪些区别

发表于:2024-11-12 作者:千家信息网编辑
千家信息网最后更新 2024年11月12日,本篇内容介绍了"C语言scanf,fscanf和sscanf有哪些区别"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读
千家信息网最后更新 2024年11月12日C语言scanf,fscanf和sscanf有哪些区别

本篇内容介绍了"C语言scanf,fscanf和sscanf有哪些区别"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

目录
  • 一.scanf,fscanf和sscanf

    • 1.scanf

    • 2.fscanf

    • 3.sscanf

  • 二.printf,fprintf和sprintf

    • 1.printf

    • 2.fprintf

    • 3.sprintf

一.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 * 的参数就好了。

例子:

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

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

"C语言scanf,fscanf和sscanf有哪些区别"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

格式 数据 字符 参数 字符串 文件 输出 也就是 就是 指针 输入 例子 函数 指向 内容 实际 文本 更多 说明符 键盘 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据存数据库还是hbase 软件开发人员怎么创业 物流软件开发正式完整版 面向对象数据库的主要特点 网络安全公司有哪些 计算机网络安全海报创意 ping服务器是使用的哪个端口 广东华为服务器续保价格 有关网络安全的英文版顺口溜 岗前培训软件开发费用 网络技术的主要特点 一般纳税软件开发税率 工程造价管理软件开发现状 只狼怎么设置不自动连接服务器 gui界面和数据库 临沂鸿悦网络技术有限公司 卖生鲜需要哪款数据库软件 黑马网络技术交流平台 濮阳网络技术哪家强 网络安全多网合一时代 论文查重查哪几个数据库 河北方维网络技术有限公司 DAM 数据库安全 最佳实践 服务器勒索病毒应该用什么防 网络安全宣传2019 小学一二年级网络安全绘画 联想服务器关机后能加电自启吗 通信和网络技术的缺点 工作中的我严守网络安全红线 群辉jellyfin服务器视频
0