C语言中fscanf和fprintf函数的使用

发布于:2023-01-13 ⋅ 阅读:(355) ⋅ 点赞:(0)

目录

一、前言

二、对比

1、scanf和fscanf:

2、printf和fprintf:

三、结论:

四、代码实现 

1、fprintf相关代码

2、fscanf代码实现 

3、 用fscanf和fprintf实现scanf和printf功能:


一、前言

在了解fscanf和fprintf之前我们先简单了解一下键盘和屏幕。程序打开时会默认打开两个流设备。1、键盘----标准输入流(stdin);2、屏幕---标准输出流(stdout)。这就实现了从键盘输入输出到屏幕上。

二、对比

1、scanf和fscanf:

MSDN中对于fscanf的解释:Read formatted data from a strea(从流中读取格式化数据。)

MSDN中对于scanf的解释:Read formatted data from the standard input s(从标准输入流中读取格式化数据。)

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

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

2、printf和fprintf:

MSDN中对于fprintf的解释:  Print formatted data to a stream.(将格式化的数据打印到流中。) 

MSDN中对于printf的解释: Print formatted output to the standard output stream.(将格式化输出打印到标准输出流。)

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

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

三、结论:

1、fprintf和fscanf比printf和scanf多了一个参数(文件指针流),其他使用方式都一样。

2、printf函数打印数据到标准输出流(stdout)中,而fprintf适用于所有输出流,可以可以将数据写入到自定义的流(stream)中,不仅仅局限于标准输出流(屏幕)。

3、同样scanf函数从标准输入流(stdin)中读取数据,而fscanf适用于所有输入流,可以将数据从自定义的流(stream)中读取出来,不仅仅局限于标准输入流。

四、代码实现 

1、fprintf相关代码

int main()
{
	int a=10 ;
	float b=3.14f;
	char arr[10]="hello";

	//打开文件
	FILE* pf = fopen("text.txt", "w");
	if (pf == NULL)
	{
		printf("%s\n", strerror(errno));
		return 0;
	}
	//操作文件

    //将a,b,arr中的数据write(写入)到pf流中去
	fprintf(pf, "%d %f %s\n", a, b, arr);
    //将常量字符串写入到pf流中去
	fprintf(pf, "modern");
    
    //用fprintf实现printf---->将数据写入到标准输出流中(屏幕)
    fprintf(stdout,"%d %f %s\n", a, b, arr);

	//关闭文件
	fclose(pf);
	pf = NULL;

	return 0;
}

运行结果: 

经过上面的代码我们已经在当前文件目录下创建了一个text.txt文件,并且将数据存放了进去。

2、fscanf代码实现 

 数据存放进了文件中,下面我们可以用fscanf从文件指针流(pf)中读取数据并且放到相应的变量中去。

补充:我们在键盘上输入的任何东西,会先进入输入缓冲区区域,然后程序从输入缓冲区里把数据一个一个读出来。scanf函数从标准输入流(键盘)读取数据后,数据被暂时放了缓冲区中。而fscanf读取的数据会被放入到变量中,会直接改变变量的值。 

例1、因为我们要从流中读取数据,所以先不给a,b,arr数组赋值,看一下fscanf函数是否真的从流中读取数据放入了a,b,arr中。

int main()
{
	int a;
	float b;
	char arr[10];

	//打开文件
	FILE* pf = fopen("text.txt", "r");
	if (pf == NULL)
	{
		printf("%s\n", strerror(errno));
		return 0;
	}
	//操作文件
	//从pf流中读取数据并且存放到a,b,arr中去
	fscanf(pf, "%d %f %s", &a, &b, arr);
	printf("a=%d,b=%f,arr=%s\n", a, b, arr);
	//用fprintf打印到屏幕上
	fprintf(stdout, "a=%d,b=%f,arr=%s\n", a, b, arr);


	//关闭文件
	fclose(pf);
	pf = NULL;

	return 0;
}

 结果:

例二、自己创建一个文件并输入内容,然后再程序中创建一个合适的变量来接收。

代码和结果如下: 

3、 用fscanf和fprintf实现scanf和printf功能:

int main()
{	
	int a=0;
    //用fscanf和fprintf实现scanf和printf
	fscanf(stdin, "%d", &a);
	fprintf(stdout, "%d", a);

	return 0;
}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到