1.各种文件操作函数/文件使用方式总览
2.scanf printf和文件操作函数的区别
PS:可以将键盘和屏幕理解成接收的文件
3.fgetc fputc(字符)
fgetc特性:
- fgetc读取一次后,指针会跳着走,自动到下一个
- fgetc读到的不是Ascall码值,会返回EOF
例:统计给定文本文件名为filename中所有大小写英文字符的个数并返回(运用fgetc,附代码)
统计给定文本文件名为filename中所有大小写英文字符的个数并返回 long fileLengthOf(char filename[]) { char ch; long num=0; FILE*fp=fopen(filename,"r"); if(fp==NULL) { return -1; } while(!feof(fp))//这里默认文件夹不为空,相关知识点见我主页feof博客 { ch=fgetc(fp); if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z') { num++; } } fclose(fp); fp=NULL; return num; }
4.fgets fputs(行)
写入:
读取:
fputs特性:
- 写文件时会一行一行写,并且自动换行(手动加\n)
fgets特性:
- 读的时候会放到一个字符数组里,再通过字符数组打印
- 读取的数据默认带\0,也就是默认少一位
- 读取的数据,当一行结束仍然不够数,则不会再读下一行(解决方法:再读取一次)
- 5.fprintf fscanf (格式化)
特点:
fscanf用于读取字符串数据流时,遇到空白字符(空格' '; 制表符'\t'; 新行符'\n')就停止,若要读取完整的一行数据,可以使用格式控制("%[^\n]%*c")。
(与其他文件函数对比)写入时目标指针fp放前面
1.对比fprintf和printf格式:
2.对比fprintf与fscanf格式:
例:从已知格式的ASCLL文件filename中顺序读取id和name,返回读取信息的条数(运用fscanf,附代码)
从已知格式的ASCLL文件filename中顺序读取id和name,返回读取信息的条数 int funFile0(char*filename,int id[],char name[][32]) { int i,num; FILE *fp=fopen(filename,"r"); //FILE *fp=fopen(filename,"w");写入 if(fp==NULL) return -1; else { fscanf(fp,"%d",&num);//当写时,此段删除 for(i=0;i<num;i++) { fscanf(fp,"%d%s",id+i,name[i]); //fprint(fp,"%d%s",id[i],name[i]);写入 } } fclose(fp); fp=NULL; return num; }
6.fread fwrite(二进制)
7.sscanf sprintf(字符串)
实例:利用sscanf和sprintf进行结构体成员与字符串的转换
scanf/fscanf/sscanf与printf/fprintf/sprintf的对比:
8.fseek(调节文件指针位置,3种)
fseek函数作用:调节文件指针位置
int origin的位置可以设置三种:
- SEEK_SET:文件开头
- SEEK_CUR:文件指针现在的位置
- SEEK_END:文件结尾
例子: 目的:读取到d 方法:从头向后偏移+3/从尾向头偏移-3
9.ftell(返回位移值)
10.rewind(返回起始位置)