-- 作者:admin
-- 发布时间:2015/12/14 16:52:49
-- [推荐]第十四课代码讲义:文件处理
基本使用方法 录入键盘字符: #include <stdio.h> #include <stdlib.h>
void main() { FILE *fp; char ch , filename[10]; scanf("%s", filename); if((fp=fopen(filename,"w"))==NULL) { printf("cannot open file\\n"); exit(0); } ch=getchar(); ch=getchar(); while(ch!=\'#\') { fputc(ch,fp); putchar(ch); ch=getchar(); } putchar(10); fclose(fp); }
读文件: #include <stdio.h> #include <stdlib.h> void main() { FILE *in, *out; char ch,infile[10],outfile[10]; printf("Enter the infile name:\\n"); scanf("%s",infile); if ((in = fopen(infile, "r"))== NULL) { printf("Cannot open infile.\\n"); exit(0); } while (!feof(in)) { ch=fgetc(in); printf("%d,%c\\n",ch,ch); }
fclose(in); fclose(out); }
复制文件: #include <stdio.h> #include <stdlib.h> void main() { FILE *in, *out; char ch,infile[10],outfile[10]; printf("Enter the infile name:\\n"); scanf("%s",infile); printf("Enter the outfile name:\\n"); scanf("%s",outfile); if ((in = fopen(infile, "r"))== NULL) { printf("Cannot open infile.\\n"); exit(0); } if ((out = fopen(outfile, "w"))== NULL) { printf("Cannot open outfile.\\n"); exit(0); } while (!feof(in)) fputc(fgetc(in), out); fclose(in); fclose(out); }
结合字符串访问的登录提示 #include <stdio.h> #include <stdlib.h> void main() { FILE *file; char filename[20]="d:\\\\name.txt"; char name[100]; if((file=fopen(filename,"r"))==NULL) { printf("你是第一次访问!\\n请输入你的姓名:"); file = fopen(filename, "w"); scanf("%s",name); fputs(name, file); fclose(file); } else { fgets(name,100,file); printf("欢迎你!%s\\n",name); fclose(file); } }
统计登录次数: #include <stdio.h> #include <stdlib.h> void main() { FILE *file; char filename[20]="d:\\\\name.txt"; char ch=1; if((file=fopen(filename,"r"))==NULL) { printf("你是第一次访问!\\n"); file = fopen(filename, "w"); fputc(ch, file); fclose(file); } else { ch=fgetc(file); ch++; printf("你是第%d次访问!\\n",ch); fclose(file); file = fopen(filename, "w"); fputc(ch, file); fclose(file); } }
读写二进制信息 #include <stdio.h> #include <stdlib.h> void main() { FILE *file; float i=0; float j=1; char filename[20]="d:\\\\name.dat"; char ch=1; if((file=fopen(filename,"wb"))==NULL) { return; } fwrite(&i,4,1,file); fclose(file); if((file=fopen(filename,"rb"))==NULL) { return; } printf("%f\\n",j); fread(&j,4,1,file); printf("%f\\n",j); fclose(file);
}
利用整数保存登录次数信息: #include <stdio.h> #include <stdlib.h> void main() { FILE *file; char filename[20]="d:\\\\name.dat"; int count=1; if((file=fopen(filename,"rb"))==NULL) { printf("你是第一次访问!\\n"); file = fopen(filename, "wb"); fwrite(&count,4,1,file); fclose(file); } else { fread(&count,4,1,file); count++; printf("你是第%d次访问!\\n",count); fclose(file); file = fopen(filename, "wb"); fwrite(&count,4,1,file); fclose(file); } }
改进版本: #include <stdio.h> #include <stdlib.h> void main() { FILE *file; char filename[20]="d:\\\\name.dat"; int count=1; if((file=fopen(filename,"rb"))==NULL) { printf("你是第一次访问!\\n"); } else { fread(&count,4,1,file); count++; printf("你是第%d次访问!\\n",count); fclose(file); } file = fopen(filename, "wb"); fwrite(&count,4,1,file); fclose(file); }
使用专门为整数读写定义的函数 #include <stdio.h> #include <stdlib.h> void main() { FILE *file; char filename[20]="d:\\\\name.dat"; int count=1; if((file=fopen(filename,"rb"))==NULL) { printf("你是第一次访问!\\n"); } else { count=getw(file); count++; printf("你是第%d次访问!\\n",count); fclose(file); } file = fopen(filename, "wb"); putw(count,file); fclose(file); }
结合插入结构体节点的文件读取练习 #include <stdio.h> #define NULL 0 #define LEN sizeof (struct student)
struct student { long num; float score; struct student *next; };
char filename[20]="d:\\\\name.dat";
void main() { struct student * insert(struct student *header,struct student *p0); void print(struct student *p); struct student *creat(); struct student *read(); void write(struct student * p); struct student *p; FILE *file; if((file=fopen(filename,"rb"))==NULL) { printf("你是第一次使用!\\n"); p=creat(); } else { p=read(); } print(p); //需要链表元素的学号升序排列 struct student * p0=(struct student *)malloc(sizeof(struct student)); printf("请输入要插入的学号和成绩:"); scanf("%ld,%f",&p0->num,&p0->score); p=insert(p,p0); print(p); write(p); }
void write(struct student * p) { FILE *file; if((file=fopen(filename,"wb"))==NULL) { printf("打开失败!\\n"); return; } while(p!=NULL) { fwrite(p,LEN,1,file); p=p->next; } fclose(file); }
struct student *read() { FILE *file; if((file=fopen(filename,"rb"))==NULL) { printf("读取失败!\\n"); return; } struct student *head,*p1,*p2; head=p1=(struct student *) malloc(LEN); while(1) { fread(p1,LEN,1,file); if(feof(file)) break; p2=p1; p1=(struct student *) malloc(LEN); p2->next=p1; } p2->next=NULL; fclose(file); return (head); }
void print(struct student *p) { while(p!=NULL) { printf("%ld %5.1f\\n",p->num,p->score); p=p->next; } }
struct student *creat(void) { struct student *head; struct student *p1,*p2; int n=0; p1=p2=(struct student *) malloc(LEN); scanf("%ld,%f",&p1->num, &p1->score); head=NULL; while(p1->num!=0) { n=n+1; if(n==1) head=p1; else p2->next=p1; p2=p1; p1=(struct student *)malloc (LEN); scanf("%ld,%f",&p1->num, &p1->score); } p2->next=NULL; return(head); }
struct student * insert(struct student *header,struct student *p0) { struct student *p1,*p2; p1=header; p2=header; while(1) { if(p1->num<p0->num) { p2=p1; p1=p1->next; if(p1==NULL) { p2->next=p0; p0->next=NULL; break; } } else if(p1->num>p0->num) { if(header==p1) { header=p0; p0->next=p1; break; } else { p2->next=p0; p0->next=p1; break; } } else { break; }
} return header; }
[此贴子已经被作者于2015-12-15 12:45:54编辑过]
|