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

目录

一、前言

二、对比

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;
}

  • 56
    点赞
  • 229
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: fscanf_s是C语言的一个函数,用于从文件读取格式化数据。在VS2019,它的用法如下: int fscanf_s(FILE *stream, const char *format, ...); 其,stream是指向要读取的文件的指针,format是一个字符串,指定了要读取的数据的格式,后面的省略号表示可以传入任意数量的参数,这些参数将按照format字符串指定的格式读取。 需要注意的是,fscanf_s与fscanf的区别在于前者会进行安全检查,以避免缓冲区溢出等问题。因此,在使用fscanf_s时,需要在format字符串指定每个参数的最大长度,以便函数能够正确地分配内存。例如: fscanf_s(fp, "%s %d", str, sizeof(str), &num); 这里,str是一个字符数组,sizeof(str)表示str数组的最大长度,&num是一个整型变量的地址,表示要读取的整数。 ### 回答2: fscanf_s是C语言标准库函数的一个I/O函数,可以从文件读取格式化的数据,与scanf_s函数类似。在VS2019,该函数用法如下: 1. 头文件 #include <stdio.h> 2. 参数 int fscanf_s(FILE* stream, const char* format, …); 其,第一个参数stream是输入文件的FILE指针,第二个参数format是数据的格式字符串,后面的参数用于存储读取的数据。 3. 返回值 如果成功读取数据,则返回读取的变量个数,否则返回EOF或者错误码。 4. 示例 下面给出一个示例代码: #include <stdio.h> int main() { FILE* fp; fopen_s(&fp, "test.txt", "r"); if (fp == NULL) { printf_s("open file failed\n"); return -1; } int a, b, c; fscanf_s(fp, "%d %d %d", &a, &b, &c); fclose(fp); printf_s("%d %d %d\n", a, b, c); return 0; } 其,打开test.txt文件,并读取文件三个整数,然后输出这三个整数。在使用fscanf_s函数时,需要注意以下几点: 1. format字符串的特殊符号需要转义,例如,%需要写为%%。 2. 如果读取字符串时,需要保证读取的长度不超过变量长度,否则会产生错误。 3. 如果变量类型是浮点数,需要在format字符串加上l前缀,例如:%lf。 总之,fscanf_s函数是一个很重要的输入函数,可以用于读取各种类型的数据。在使用函数时,需要仔细检查参数的正确性,以避免产生错误。 ### 回答3: 在VS2019fscanf_s是一个C语言的输入函数,与scanf_s函数类似,都是从标准输入流(如键盘)读入一系列数据。fscanf_s函数与scanf_s函数的区别在于,在读取输入时,fscanf_s需指定流的来源(即文件),比scanf_s更加灵活。 fscanf_s的语法格式如下: `int fscanf_s( FILE * stream, const char * format [ , argument ] ... );` stream是指定输入流的指针,可以是标准输入设备(stdin),也可以是用户通过fopen()函数打开的文件指针。format是一个字符字符串,它指定了读入的格式,可以与printf和scanf等函数类似使用。argument是读入的目标变量,可以是任何C数据类型,如整型、字符型、浮点型、字符串等。 需要注意的是,fscanf_s的返回值为成功读入的变量数,如果读取失败,则返回EOF或一个负数。 在使用fscanf_s时,需要注意以下几点: 1. format字符串的控制符必须与变量类型匹配,否则可能触发未定义的行为或隐患。 2. 如果读取字符串,应使用"%s"控制符,并确保字符串具有足够的空间。 3. 如果读取数字,应使用带有修饰符的控制符,例如"%d"表示读取十进制整数,"%f"表示读取浮点数。 4. 在读取字符之前,需要跳过前导的空格、tab、回车等空白字符,可以使用字符串的空格或"%*s"等控制符实现。 总之,fscanf_s函数是一个方便、灵活的输入函数,它能够方便我们从磁盘文件读取数据,并为我们提供了很多控制符,可以在读取数据时实现很多自定义的功能。但也需要注意数据类型的匹配以及输入数据的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值