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