首先我们对比一组函数:
scanf:按照一定的格式从键盘中输入数据
printf:按照一定的格式把数据打印(输出)到屏幕上
这两个函数适用于标准输入/输出流的格式化的输入/输出语句
fscanf:按照一定的格式从输入流(文件/stdin)输入数据
fprintf:按照一定的格式从输出流(文件/stdout)输出数据
这两个函数适用于所有的输入/输出流的格式化输入/输出语句
sscanf:从字符中按照一定的格式读取出格式化的数据
sprintf:把格式化的数据按照一定的格式转换成字符串
一、文件的随机读写
1. fseek:根据文件指针的位置和偏移量来定位文件指针
int fseek(FILE* stream, long int offset, int origin);
通过一下例子了解该函数的使用:
int main()
{
FILE* pf = fopen("test.txt", "r");
if (pf == NULL)
{
perror("fopen()");
return 1;
}
//假定test.txt内存储的内容为:abcdef
//读文件
fseek(pf, 2, SEEK_SET); //从文件开始位置开始偏移2个,下面将会读取到c
int ch = fgetc(pf);
printf("%c\n", ch); //c
fclose(pf);
return 0;
}
2. ftell:返回文件相对于起始位置的偏移量
long int ftell(FILE* stream);
例子:
int main()
{
FILE* pf = fopen("test.txt", "r");
if (pf == NULL)
{
perror("fopen()");
return 1;
}
//假定test.txt内存储的内容为:abcdef
//读文件
fseek(pf, 2, SEEK_SET); //从文件开始位置开始偏移2个
int ch = fgetc(pf);
printf("%c\n", ch); //c
//返回当前文件偏移量
int pos = ftell(pf);
printf("%d\n", pos); //由于上方读取到c,从a-b-c一共偏移了3个字符
fclose(pf);
return 0;
}
二、文件读取结束的判定
在C语言中我们通常会使用feof函数来判定文件读取的结束,然而对该函数的使用过程中,由于大部分人还没有搞清楚如何正确使用该函数,所以会使用错误,下面将介绍如何正确使用!
牢记:在文件读取过程中,不能用feof函数的返回值直接用来判断文件时候结束。
- 文本文件读取时候结束,根据返回值进行判断
用fgetc判断返回值是否为EOF
用fgets判断返回值是否为NULL
- 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数
例如:用fread判断返回值是否小于实际要读的个数