【C语言】printf、fprintf、sprintf,scanf、fscanf、sscanf的区别

目录

前言

printf、fprintf、sprintf

printf

 fprintf

sprintf

scanf、fscanf、sscanf

 scanf

fscanf

sscanf


前言

这几个函数曾出现在面试中,因为函数名都差不多,所以很让人迷惑啊~

下面我们逐个分析。

printf、fprintf、sprintf

这三个函数的主要区别在于:输出的目标不同。

printf:将格式化数据输出到标准输出流(一般是屏幕)

fprintf:用于向文件中写入格式化数据(适用于所有输出流)

sprintf:将数据格式化为字符串并存储在指定区域

printf

int printf( const char *format [, argument]... );

因为printf的第一个参数是const char*,所以下面这两种写法是等价的。

printf("hello world\n");

char arr[] = "hello world\n";
printf(arr);

 fprintf

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

相比于printf的参数列表,fprintf仅多了一个文件指针的参数,这个参数就指明了它要输出的地方。

fprintf(stdout, "hello world\n");

 前面说到,fprintf适用于所有文件输出流,所以它是可以完成printf的功能的。以下这两总写法是等价的。

printf("hello world\n");
fprintf(stdout, "hello world\n");

sprintf

int sprintf( char *buffer, const char *format [, argument] ... );

 下面看看如何使用。

int year  = 2024;
char* hope = "world peace";

char arr[20];
sprintf(arr, "%d %s", year, hope);
printf("%s\n", arr);//2024 world peace

scanf、fscanf、sscanf

这三个函数的主要区别在于:读取数据的来源不同。

scanf:从标准输入流(键盘)读取格式化数据

fscanf:从文件流中读取格式化数据(适用于所有流)

sscanf:从字符串中读取格式化数据

 scanf

int scanf( const char *format [,argument]... );

 在使用时,左边区域是格式化控制,右边是指定存放的位置(地址)。

int input;
scanf("%d", &input);
scanf("%d", input);//error

fscanf

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

前面说过,fscanf适用于所有流,所以它可以实现scanf的功能。

int input;
scanf("%d", &input);
fscanf(stdin, "%d", &input);

上面这两行代码是等价的。

sscanf

int sscanf( const char *buffer, const char *format [, argument ] ... );

从字符串中读取格式化数据,下面演示一下:

char arr[] = "hello 2024";
int year;
char str[20];
sscanf(arr, "%s %d", str, &year);
printf("%s ", str);
printf("%d\n", year);
//hello 2024

完~

相关推荐

  1. C++】C语言C++区别

    2024-07-11 19:42:02       22 阅读
  2. c++和c语言区别实例

    2024-07-11 19:42:02       37 阅读
  3. C++与C语言之间区别

    2024-07-11 19:42:02       41 阅读
  4. C语言C++和C#区别在什么地方?

    2024-07-11 19:42:02       27 阅读
  5. C#面试基础语法&和&&区别

    2024-07-11 19:42:02       51 阅读
  6. C 语言中,结构体「.」与「->」区别

    2024-07-11 19:42:02       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 19:42:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 19:42:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 19:42:02       57 阅读
  4. Python语言-面向对象

    2024-07-11 19:42:02       68 阅读

热门阅读

  1. 【Django】Django 使用连接串配置数据库

    2024-07-11 19:42:02       22 阅读
  2. Sass 和 SCSS

    2024-07-11 19:42:02       19 阅读
  3. 系统迁移从CentOS7.9到Rocky8.9

    2024-07-11 19:42:02       23 阅读
  4. 深入理解CSS中的块格式化上下文(BFC)

    2024-07-11 19:42:02       21 阅读
  5. EdgeOne安全能力开箱测评挑战赛

    2024-07-11 19:42:02       24 阅读
  6. mysql 8.0.37 客户端在centos7安装顺序

    2024-07-11 19:42:02       22 阅读
  7. 【C++】include头文件中双引号和尖括号的区别

    2024-07-11 19:42:02       17 阅读
  8. 在 MyBatis-Plus 中,字段更新为 null 的方法

    2024-07-11 19:42:02       17 阅读
  9. html基础-持续更新

    2024-07-11 19:42:02       23 阅读