本期介绍🍖
主要介绍:scanf()、printf()、fscanf()、fprintf()、sscanf()、sprintf()这三对输入/输出函数的区别,而且详细讲解了sscanf()、sprintf()这两个函数的应用场景👀。
概述🍖
在C语言的输出和输入库中,有三对及其相似的库函数:printf()、scanf()、fprintf()、fscanf()、sprintf()、sscanf()。它们实现不同的功能,但会经常被搞混。接下来我就带着大家区分一下这些函数。
详解🍖
首先,我们最熟悉的因该是scanf() 和 printf(),是针对标准输入(输出)流的函数,也就是默认输入是从键盘上读取的数据、输出是向屏幕上输出数据的。函数的类型如下图所示:
- int scanf( const char *format [,argument]… );
- int printf( const char *format [, argument]… );
接着,相对比较熟悉的是,之前在文件操作这章所学的fscanf()和fprintf(),这是一对针对于所有输入(输出)流的格式化输入(输出)函数,也就是说你可以用这一对函数对所有的外部设备进行输入(输出)操作,前提是你能提供该外部设备所对应的“流”。函数的类型如下所示:
- int fscanf( FILE *stream, const char *format [, argument ]… );
- int fprintf( FILE *stream, const char *format [, argument ]…);
最后,还需要讲解一对输入(输出)函数sscanf()和sprintf()。相较于前两对函数而言sscanf() 和 sprintf() 并不用于与外部设备之间进行数据传输,而是用于实现数据与字符串之间的转换。函数格式如下所示:
sprintf() :将一个格式化的数据,转化成字符串。
格式: int sprintf( char *buffer, const char *format [, argument] … );
其中sprintf()
的第一个参数char* buffer
是一个字符指针,指向用于存放数据转换后字符串的字符数组,第二个参数const char *format [, argument] ...
与printf() 中参数的用法一致。下面举个例子:
#include<stdio.h>
struct S
{
char name[20];
int age;
float score;
};
int main()
{
struct S s = { "zhangsan",23,56.1 };
char arr[100] = { 0 };
sprintf(arr, "%s %d %f", s.name, s.age, s.score);
printf("%s\n", arr);
return 0;
}
sscanf() :从一个字符串中,转化出格式化的数据。
格式: int sscanf( const char *buffer, const char *format [, argument ] … );
其中sscanf()
的第一个参数char* buffer
是一个字符指针,指向需要被转换成格式化数据的字符数组,第二个参数const char *format [, argument] ...
与scanf() 中参数的用法一致。下面举个例子:
#include<stdio.h>
struct S
{
char name[20];
int age;
float score;
};
int main()
{
struct S s = { "zhangsan",23,56.1 };
char arr[100] = { 0 };
struct S save = { 0 };
sprintf(arr, "%s %d %f", s.name, s.age, s.score);
printf("%s\n", arr);
sscanf(arr, "%s %d %f", save.name, &(save.age), &(save.score));
printf("%s %d %f\n", save.name, save.age, save.score);
return 0;
}
我想肯定会有人问:这两个函数的设计的目的是什么呀?谁会平白无故让数据的转化成字符串,从字符串中读取数据,这不多此一举嘛。 当然这么想无可厚非,因为你还没有深入的了解前端数据的存储形式,前端与后端之间数据的传输,当学习的代码越来越多,见识越来越广的时候,自然而然就明白了。下面来讲解一下这两个函数的应用场景。
当我们想开发一个应用软件的时候,需要使用BS结构,也就是浏览器、服务器结构。当前端页面获取信息的时候,是以字符串的形式获取的,就譬如:“姓名” “年龄” “体重”。然后会进行组合,组合成一个字符串,譬如:“姓名 年龄 体重”。最终将这个字符串传递给后端,后端可能是以结构的形式存储的,所以就需要用到像sscanf()
这样的函数,从字符串中读取数据。同样的如果我们想将后端的数据呈现到前端页面上去,就需要通过像sprintf()
这样的函数,将数组转换成字符串然后传递给前端。如下图所示:
这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧👀。