当前位置:   article > 正文

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

【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*,所以下面这两种写法是等价的。

  1. printf("hello world\n");
  2. char arr[] = "hello world\n";
  3. printf(arr);

 fprintf

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

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

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

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

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

sprintf

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

 下面看看如何使用。

  1. int year = 2024;
  2. char* hope = "world peace";
  3. char arr[20];
  4. sprintf(arr, "%d %s", year, hope);
  5. printf("%s\n", arr);//2024 world peace

scanf、fscanf、sscanf

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

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

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

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

 scanf

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

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

  1. int input;
  2. scanf("%d", &input);
  3. scanf("%d", input);//error

fscanf

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

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

  1. int input;
  2. scanf("%d", &input);
  3. fscanf(stdin, "%d", &input);

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

sscanf

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

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

  1. char arr[] = "hello 2024";
  2. int year;
  3. char str[20];
  4. sscanf(arr, "%s %d", str, &year);
  5. printf("%s ", str);
  6. printf("%d\n", year);
  7. //hello 2024

完~

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/811288?site
推荐阅读
相关标签
  

闽ICP备14008679号