- fprintf函数:对于fprintf函数,它和printf一样,但是它的表达式为:int fprintf ( FILE * stream, const char * format, ... );和printf的很相似,但有不一样。它是格式化输出函数,代码为:
#include<stdio.h> struct S { char name[10]; int age; int score; }; //主函数 int main() { struct S s = { "张三",20,78 }; //打开文件 FILE* pf = fopen("test.txt", "w"); if (pf == NULL) { perror("fopen"); return 1; } //写文件--以文本的形式写出来的 fprintf(pf,"%s %d %d", s.name, s.age, s.score); //关闭文件 fclose(pf); pf = NULL; return 0; }
有输出函数,就有输入函数。
-
fscanf就是一个格式化输入函数,它的表达式:
则它的代码为:
#include<stdio.h>
struct S
{
char name[10];
int age;
int score;
};
//主函数
int main()
{
struct S s = { 0 };
//打开文件
//想从文件中读取数据放在s中。
FILE* pf = fopen("test.txt", "r");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//读文件--以文本的形式读出来的
fscanf(pf, "%s %d %d", (s.name), &(s.age), &(s.score));
//name为数组不需要取地址,但其它的就要
//打印
printf("%s %d %d", s.name, s.age, s.score);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
这个就是fscanf的代码,其实只要记住它是如何表达的,就行了。
- fwrite函数:它的表达式就比较繁琐,需要字符的大小,和字符的个数。则代码为:
#include<stdio.h> //fwrite函数的使用 int main() { int arr[] = { 1,2,3,4,5 }; FILE* pf = fopen("test.txt", "wb");//wb代表二进制的写 if (pf == NULL) { perror("fopen"); return 1; } //写数据 int sc = sizeof(arr) / sizeof(arr[0]); fwrite(arr, arr[0], sc,pf); //关闭文件 fclose(pf); pf = NULL; return 0; }
二进制的方法写进去,我们是看不懂的:所以,二进制的我们很少使用。
-
fread的函数:它的表达式为:和fwrite差不多,但又有区别。它是二进制输入,则读出的代码为:
#include<stdio.h> int main() { int arr[5] = { 0 }; FILE* pf = fopen("test.txt", "rb");//wb代表二进制的写 if (pf == NULL) { perror("fopen"); return 1; } //读数据 int sc = sizeof(arr) / sizeof(arr[0]); fread(arr, sizeof arr[0], sc, pf); int i = 0; //利用循环来读出arr for (i = 0; i < sc; i++) { printf("%d\n", arr[i]); } //关闭文件 fclose(pf); pf = NULL; return 0; }
这就是二级制的读去文件。
-
对于上述的四个函数:fscanf,fread,fwrite和fprintf,本质就是读或写。