目录
函数介绍:
fprintf:
将结构体变量s的成员列表内容写入文件中:
文件效果:已经进行了格式化,3.140000是最明显的效果,因为float需要补齐0来补充精度
和printf的对比:
不同之处:
和printf的效果对比:
屏幕效果一样:
fscanf:
从文件中读取数据,并将数据依次按照格式化分配到构体成员中,并使用printf打印:
文件内容:
代码操作:
读取文件效果后的打印效果:从文件中读取了数据内容并且进行了printf打印
注意:
打印效果:
和scanf的对比:
不同之处:
和scanf对比效果:
小总结:
附赠内容:
sscanf & sprintf:
sprintf:
结果展示:
内部展示:
sscanf:
结果:
函数介绍:
fprintf:
将结构体变量s的成员列表内容写入文件中:
struct S
{
int n;
float f;
char arr[20];
}
int main()
{
struct S s = {100,3.14f,"zhangsan"};
FILE* pf = fopen("data.txt","w");
if (pf == NULL)
{ perror("fopen");
return 1;
}
fprintf(pf,"%d %f %s", s .n , s .f , s.arr) ;
return 0;
}
文件效果:已经进行了格式化,3.140000是最明显的效果,因为float需要补齐0来补充精度
和printf的对比:
不同之处:
- printf从标准流中输出数据,比如在屏幕中写入数据内容。
- fprintf从指定流中输出数据,比如在指定的文件中写入数据内容。
和printf的效果对比:
printf("%d %f %s", s .n , s .f , s.arr) ;
写入结构体变量中的成员内容。
fprintf(stdout,"%d %f %s", s .n , s .f , s.arr) ;
将结构体变量中的成员内容写入屏幕中。
屏幕效果一样:
fscanf:
从文件中读取数据,并将数据依次按照格式化分配到构体成员中,并使用printf打印:
文件内容:
代码操作:
struct s
{
int n;
float f;
char arr[20];
}
int main()
{
struct S s = {0}:
FILE* pf = fopen("data.txt","r");
if (pf == NULL)
{
perror("fopen");
return 1;
}
fscanf(pf."%d %f %s",&(s .n).&(s.f),s.arr);
printf("%d %f %s",&(s .n).&(s.f),s.arr)
return 0;
}
读取文件效果后的打印效果:从文件中读取了数据内容并且进行了printf打印
注意:
这里的结构体变量s一开始进行了初始化为0,所以单纯使用printf是打印不出来数据的,所以这里printf打印的数据是fscanf读取而来的,而printf打印了fscanf读取的内容。
打印效果:
和scanf的对比:
不同之处:
- fscanf是从指定流中拿取数据,比如只读取文件中的内容。
- scanf是从标准流中拿取数据,比如可以从键盘中或者其他变量中拿取数据。
和scanf对比效果:
scanf("%d %f %s", &(s .n), &(s .f), s .arr);
fscanf(pf."%d %f %s",&(s .n), &(s.f),s.arr);
小总结:
附赠内容:
sscanf & sprintf:
sprintf:
把格式化的数据变成字符串。
sprintf(存放字符串的空间起始地址,格式化的格式,需要变成字符的数据变量)
将结构体变量s的成员进行赋值,而后又创建一个数组空间,将结构体变量的成员使用sprintf将成员变量变成一个字符串。
结果展示:
内部展示:
已经变成字符串了。
sscanf:
从字符中读取格式化的数据。
sscanf(存放字符串的空间起始地址,格式化的格式,需要格式化的数据地址)
在之前sprintf的代码基础上,在设立一个结构体,将原先已经变成字符串的数据,从arr这个数组空间中拿出,并以此放入结构体变量t的成员中,进行格式化数据,最后进行打印。
结果:
- 前者是结构体变量s的成员被sprintf变成字符串后,放在arr数组空间的内部。
- 后者是arr中的字符串被sscanf从数组空间中拿出,重新变成格式化数据的结构体变量t的成员。