萌新的c语言学习13
(对于上次c语言文件叙述的小型补充)
后续更新一个总结性质的文案
二进制输入 二进制输出
fread fwrite 二进制输出 文件
struct s
{
char name[20];
int age;
double score;
};
int main()
{
struct s s = { "张三",20,50.6 };
FILE* pf = fopen("test.txt", "w");
if (pf == NULL)
{
return 0;
}
//二进制形式
fwrite(&s, sizeof(struct s), 1, pf);
fclose(pf);
pf = NULL;
return 0;
}
为什么这后面是乱码 因为我们是以二进制的形式存进去的
struct s
{
char name[20];
int age;
double score;
};
int main()
{
struct s tmp = { 0};
FILE* pf = fopen("test.txt", "rb");
if (pf == NULL)
{
return 0;
}
//二进制形式
fread(&tmp, sizeof(struct s), 1, pf);
printf("%s %d %lf\n", tmp.name, tmp.age, tmp.score);
fclose(pf);
pf = NULL;
return 0;
}
这样就能读出二进制的数据了
我们来考虑对通讯录的变种的考量
通讯录的内存文件是否也可以再次进行优化
我们写文件是按照顺序读取
那么我们文件其实还有随机读取的用法
fseek
移动文件指针到特定的位置
int fseek(指针, 偏移量, 文件指针的当前位置)
调整指针 在起始位置 偏移多少
关于起始位置有3个选项 seek_cur文件指针的当前位置
seek_end 以文件的末尾位置
seek_set 文件的起始位置
比如说结尾的位置 abcdef那么其实指向的是f后面的位置 我们要想指到e就要偏移-2
int main()
{
FILE* pf = fopen("test.txt", "r");
if (pf == NULL)
{
return 0;
}
//定位文件指针
fseek(pf,-2,SEEK_END);
//2.读取文件
int ch=fgetc(pf);
printf("%c\n", ch);//打印出了c
//1.定位文件指针
//2.读取文件
fclose(pf);
pf = NULL;
return 0;
}
ftell 返回文件指针相对于起始位置的偏移量
int main()
{
FILE* pf = fopen("test.txt", "r");
if (pf == NULL)
{
return 0;
}
//定位文件指针
fseek(pf,-2,SEEK_END);
int pos = ftell(pf);
printf("%d\n", pos);
//2.读取文件
int ch=fgetc(pf);
printf("%c\n", ch);//打印出了c
//1.定位文件指针
//2.读取文件
fclose(pf);
pf = NULL;
return 0;
}
rewind 让文件指针的位置回到起始位置
int main()
{
FILE* pf = fopen("test.txt", "r");
if (pf == NULL)
{
return 0;
}
//定位文件指针
fseek(pf,-2,SEEK_END);
int pos = ftell(pf);
printf("%d\n", pos);
//2.读取文件
int ch=fgetc(pf);
printf("%c\n", ch);//打印出了c
rewind(pf);
int cd = fgetc(pf);
printf("%c\n", cd);
//1.定位文件指针
//2.读取文件
fclose(pf);
pf = NULL;
return 0;
}
关于文件结束的判定
feof默认下是-1
牢记feof并不是判断是否结束
而是用在这个文件已经结束了 我们通过feof得知文件究竟是为何而结束的
判断是因为读取失败结束 还是遇到文件尾结束
二进制文件读取结束的标志是判断返回值是否小于实际要读取的个数
fgetc当读取失败的时候或者遇到文件结束时都会返回EOF
ferror 是因为遇到错误再结束的
feof 是因为eof而结束的文章来源:https://www.toymoban.com/news/detail-512593.html
if ferror(fp)
{
puts("I/o error when reading:)
}
这里他会最后输出I/o error when reading:再加上 错误码文章来源地址https://www.toymoban.com/news/detail-512593.html
到了这里,关于【【萌新的c语言学习13】】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!