关于C/C++中,fprintf和fscanf的问题!

如题所述

二者在c语言和c++中的功能是相同的。
1
printf。
c语言的标准格式化输出函数。其调用格式为
int
printf(char
*
format_string,
...);
参数个数不定,依据第一个参数格式字符串中的格式字符,决定后续有多少个参数。
printf会按照格式字符串中的指定的规则,将自身及后续参数值输出到标准输出。
返回值为实际输出变量的个数。
2
fprintf。
c语言的标准格式化输出到文件函数。调用格式为
int
fprintf(file
*fp,
char
*
format_string,
...);
与printf类似,也是根据格式字符串将后续参数输出,不过目标不是固定的标准输出,而是由fp指定的文件。
所以,fprintf的第一个参数设置为stdout时,与printf功能相同。
3
以上两个函数,在c++中同样支持,使用方法相同。不过c++中更推荐使用流对象cout来执行输出。同时使用流对象类fstream来执行文件的操作。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-01-10
这个如果只有一个数的话,是没问题的;如果超过两个数的话,有风险。
假如你要往一个文件中写入两个数,而它们写进去的时候,因为所占位数都比较多,造成两个数写入的时候相连,就会出问题。例如:
int
main()
{
double
a
=
1234567.23456789,
b
=
4567890123.56789012;
FILE*
pFile
=
fopen("a.txt",
"w");
fprintf(pFile,
"%16.6f",
a);
fprintf(pFile,
"%16.6f",
b);
fclose(pFile);
pFile
=
fopen("a.txt",
"r");
fscanf(pFile,
"%lf",
&a);
fscanf(pFile,
"%lf",
&b);
fclose(pFile);
printf("%f
%f",
a,
b);
}
写到文件中的结果是:
1234567.2345684567890123.567890
因为两个数连在一块了,所以再读出的时候,b就变成了0.567890。
为了安全,你在写入的时候,应该加个分隔符,比如空格。
fprintf(fp,"%16.6f
",data);