目录
文件效果:已经进行了格式化,3.140000是最明显的效果,因为float需要补齐0来补充精度
从文件中读取数据,并将数据依次按照格式化分配到构体成员中,并使用printf打印:
读取文件效果后的打印效果:从文件中读取了数据内容并且进行了printf打印

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


- printf从标准流中输出数据,比如在屏幕中写入数据内容。
- fprintf从指定流中输出数据,比如在指定的文件中写入数据内容。
printf("%d %f %s", s .n , s .f , s.arr) ;
写入结构体变量中的成员内容。
fprintf(stdout,"%d %f %s", s .n , s .f , s.arr) ;
将结构体变量中的成员内容写入屏幕中。


- 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;
- }
这里的结构体变量s一开始进行了初始化为0,所以单纯使用printf是打印不出来数据的,所以这里printf打印的数据是fscanf读取而来的,而printf打印了fscanf读取的内容。


- fscanf是从指定流中拿取数据,比如只读取文件中的内容。
- scanf是从标准流中拿取数据,比如可以从键盘中或者其他变量中拿取数据。
- scanf("%d %f %s", &(s .n), &(s .f), s .arr);
- fscanf(pf."%d %f %s",&(s .n), &(s.f),s.arr);



把格式化的数据变成字符串。
sprintf(存放字符串的空间起始地址,格式化的格式,需要变成字符的数据变量)

将结构体变量s的成员进行赋值,而后又创建一个数组空间,将结构体变量的成员使用sprintf将成员变量变成一个字符串。


已经变成字符串了。
从字符中读取格式化的数据。
sscanf(存放字符串的空间起始地址,格式化的格式,需要格式化的数据地址)

在之前sprintf的代码基础上,在设立一个结构体,将原先已经变成字符串的数据,从arr这个数组空间中拿出,并以此放入结构体变量t的成员中,进行格式化数据,最后进行打印。
