fgets&fputs
#includeint main(void){ FILE* fr = fopen("student_len.txt","r"); FILE* fw = fopen("studemt.txt","w"); char temp[1024]=""; while(fgets(temp,1024,fr)!=NULL) { fputs(temp,fw); } return 0;}
fgets
读取一行;- 参数一
缓冲数组
,参数二缓冲数组大小
,参数三源文件流
; fputs
输出一行- 参数一
缓冲数组
,参数二目标文件流
;
总结
- fgets读取文本中一行数据并且结尾判定以
NULL
为条件; - fputs输出一行并且输出后会换行,具有追加的能力不会在第二次输出覆盖掉前一次输出的信息;
fgetc&fputc
#includeint main(void){ FILE* fr = fopen("string.txt","r"); FILE* fw = fopen("strings.txt","w"); char ch ='\0'; while((ch=fgetc(fr))!=-1) { putc(ch,fw); } return 0;}
fgetc
读取一个字符;- 参数只有一个源文件流,返回的是字符的ASCII码;
fputc
输出一个字符;- 参数一
单个字符
,参数二目标文件流
;
总结
- fgetc读取文本中一行数据并且结尾以
-1
为条件; - fputc输出一个字符,输出后会换行并且,具有追加能力不会第二次输出覆盖掉前一次输出的信息;
fread&fwrite
- 写入到二进制文件
#include#include #define LEN 20typedef struct emp{ int id; char name[LEN]; float many;}EMP;int main(void){ EMP ep[2]; memset(ep,0,sizeof(ep)); FILE* fw = fopen("str.bin","w"); for(int i=0;i<2;i++) { printf("请输入id:"); scanf("%d",&(ep+i)->id); printf("请输入姓名:"); scanf("%s",(ep+i)->name); printf("请输入薪资:"); scanf("%f",&(ep+i)->many); } fwrite(ep,sizeof(EMP),2,fw); return 0;}
- 读取回结构体
#include#include #define LEN 20typedef struct emp{ int id; char name[LEN]; float many;}EMP;int main(void){ EMP ep[2]; memset(ep,0,sizeof(ep)); FILE* fr = fopen("str.bin","r"); fread(ep,sizeof(EMP),2,fr); for(int i=0;i<2;i++) { printf("%d\n",(ep+i)->id); printf("%s\n",(ep+i)->name); printf("%.2f\n",(ep+i)->many); } return 0;}
总结
fread
从一个二进制文件中读取信息并且不需要遍历fwrite
把一个数组写入到二进制文件中,且不需要遍历写入- 参数一
存放数据的数组
,参数二数组内元素的单个字节大小
,参数三数组内有多少个元素
,参数四文件流