文件类型
根据数据的组织形式,数据文件被称为文本文件或者二进制文件。
(1)数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。
(2)如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。
文件的读写顺序
读文件之前打开文件代码:
int main()
{
FILE* pf = fopen("data.txt", "r");
if (pf == NULL)
{
printf("%s\n", strerror(errno));
return 1;
}
关闭文件
fclose(pf);
pf = NULL;
return 0;
写文件之前打开文件:
int main()
{
FILE* pf = fopen("data.txt", "w");
if (pf == NULL)
{
printf("%s\n", strerror(errno));
return 1;
}
(1)字符输入函数 fgetc 适用于所有输入流
字符输出函数 fputc 适用于所有输出流
1. 写文件
fputc(’a‘, pf);
2.读文件
int ch = fgetc(pf);
printf("%c\n", ch);
(2)文本行输入函数 fgets 适用于所有输入流
文本行输出函数 fputs 适用于所有输出流
1.写文件
fputs("hello bit\n", pf);
2.读文件
int main()
{
char arr[4] = {0};
FILE* pf = fopen("data.txt", "r");
if (pf == NULL)
{
printf("%s\n", strerror(errno));
return 1;
}
读一行数据
fgets(arr, 100, pf);
printf("%s\n", arr);
while (fgets(arr, 10, pf) != NULL)
{
printf("%s", arr);
}
(3)格式化输入函数 fscanf 所有输入流
格式化输出函数 fprintf 所有输出流
struct Stu
{
char name[20];
int age;
float score;
};
int main()
{
struct Stu s = {"zhangsan", 20, 66.5f};
FILE* pf = fopen("data.txt", "w");
if (pf == NULL)
{
printf("%s\n", strerror(errno));
return 1;
}
1.格式化写入
fprintf(pf,"%s %d %f", s.name, s.age, s.score);
printf("%s %d %f", s.name, s.age, s.score);
2.格式化的读取
fscanf(pf, "%s %d %f", s.name, &(s.age), &(s.score));
fprintf(stdout, "%s %d %f\n", s.name, s.age, s.score);
(4)二进制输入 fread 文件
二进制输出 fwrite 文件
int main()
{
struct Stu s = { "zhangsan", 20, 99.5 };
FILE* pf = fopen("data.txt", "wb");//binary
if (pf == NULL)
{
printf("%s\n", strerror(errno));
return 1;
}
1.写文件
fwrite(&s, sizeof(s), 1, pf);
2.读文件
fread(&s, sizeof(struct Stu), 1, pf);
printf("%s %d %f\n", s.name, s.age, s.score);