本期介绍❤
讲解 scanf()、printf()、fscanf()、fprintf()、sscanf()、sprintf()这三对函数的区别,
详细讲解sscanf()、sprintf()两个函数的应用场景。
_____________________________________________________________________________
详解❤
scanf()和printf()
首先,我们应该熟悉的是scanf()和printf(),这两个是针对标准输入\输出流的函数。
(标准输入是默认从键盘上读取数据,标准输出是默认输出到屏幕)。
函数类型如图所示:
———————————————————————————————————————————
fscanf()和fprintf()
接着,就是文件操作这章所学的fscanf()和fprintf(),这是针对所有输入\输出流的格式化的输入\输出的函数。
(所有输入流指的是键盘(stdin)和文件,网络等,所有输出流指的是屏幕(stdout)和文件,网络等)
提示:后期会更新“流”的博客,进行详细讲解
函数类型如图所示:
———————————————————————————————————————————
sscanf()和sprintf()
最后,讲解一下sscanf()和sprintf().相较于前两对函数而言sscanf()和sprintf()并不与外部设备进行数据传输,而是实现数据与字符串之间的转换,函数格式如下:
sprintf():将一个格式化数据,转化成字符串
对比上面提到的printf(),sprintf()只是比printf()前面多了一个参数char*str(转化成的字符串的指针)
其余参数与用法与printf()一样。下面举个例子:
#include<stdio.h>
typedef struct S
{
char name[15];
int age;
float height;
}S;
int main()
{
S s1 = { "lihua" ,18,175.5};
char arr[50] = {0};
sprintf(arr, "%s %d %f", s1.name, s1.age, s1.height);
printf("%s\n", arr);
return 0;
}
运行结果:
sscanf() : 将字符串转化成格式化的数据。
对比上面提到的sscanf(),sscanf()只是比scanf()前面多了一个参数char*str(要被转化的字符串的指针)
其余参数与用法与scanf()一样。下面举个例子:
#include<stdio.h>
typedef struct S
{
char name[15];
int age;
float height;
}S;
int main()
{
S s1 = { "lihua" ,18,175.5};
S s2 = { 0 };
char arr[50] = {0};
sprintf(arr, "%s %d %f", s1.name, s1.age, s1.height);
printf("%s\n", arr);
sscanf(arr,"%s %d %f",s2.name,&(s2.age),&(s2.height));
printf("%s %d %f\n", s2.name, s2.age, s2.height);
return 0;
}
运行结果:
———————————————————————————————————————————
我想肯定会有人问:这两个函数的设计的目的是什么呀?谁会平白无故让数据的转化成字符串,从字符串中读取数据,这不多此一举嘛。当然这么想无可厚非,因为你还没有深入的了解前端数据的存储形式,前端与后端之间数据的传输,当学习的代码越来越多,见识越来越广的时候,自然而然就明白了。下面来讲解一下这两个函数的应用场景。
当我们想开发一个应用软件的时候,需要使用BS结构,也就是浏览器、服务器结构。当前端页面获取信息的时候,是以字符串的形式获取的,就譬如:“姓名”“年龄”“身高”。然后会进行组合,组合成一个字符串,譬如:“姓名年龄身高”。最终将这个字符串传递给后端,后端可能是以结构的形式存储的,所以就需要用到像sscanf()这样的函数,从字符串中读取数据。同样的如果我们想
将后端的数据呈现到前端页面上去,就需要通过像sprintf()这样的函数,将数组转换成字符串然后传递给前端。
这种操作叫做:序列化和反序列化。
———————————————————————————————————————————
这个博客如果对你有帮助,给博主一个免费的点赞就是最大的帮助❤
欢迎各位点赞,收藏和关注哦❤
如果有疑问或有不同见解,欢迎在评论区留言哦❤