赞
踩
目录
这几个函数曾出现在面试中,因为函数名都差不多,所以很让人迷惑啊~
下面我们逐个分析。
这三个函数的主要区别在于:输出的目标不同。
printf:将格式化数据输出到标准输出流(一般是屏幕)
fprintf:用于向文件中写入格式化数据(适用于所有输出流)
sprintf:将数据格式化为字符串并存储在指定区域
int printf( const char *format [, argument]... );
因为printf的第一个参数是const char*,所以下面这两种写法是等价的。
- printf("hello world\n");
-
- char arr[] = "hello world\n";
- printf(arr);
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");
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:从字符串中读取格式化数据
int scanf( const char *format [,argument]... );
在使用时,左边区域是格式化控制,右边是指定存放的位置(地址)。
- int input;
- scanf("%d", &input);
- scanf("%d", input);//error
int fscanf( FILE *stream, const char *format [, argument ]... );
前面说过,fscanf适用于所有流,所以它可以实现scanf的功能。
- int input;
- scanf("%d", &input);
- fscanf(stdin, "%d", &input);
上面这两行代码是等价的。
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
完~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。