赞
踩
目录
1.向文件中写入(输入字符)
用 fputc 函数或 puts 函数可以把一个字符写到磁盘文件中去。
int fputc(int ch,FILE * fp)
ch 是要输出的字符,他可以是一个字符常量,也可以是一个字符变量;fp是文件指针变量,已经指向了一个由fopen函数打开的文件。
功能:fputc(ch,fp)函数将字符输入到fp所指向的流式文件中去。如果输出成功,返回值就是输入的字符,失败则返回EOF。
从键盘输入遗传字符,以回车符\n结束,然后输入到磁盘文件中去
- #include<stdio.h>
- #include<stdlib.h>
- int main()
- {
- //从键盘输入遗传字符,以回车符\n结束,然后输入到磁盘文件中去
- FILE * fp;
- char ch;
- if((fp=fopen("output1.txt","w"))==NULL)
- {
- printf("无法创建文件!");
- exit(0);
- }
- while((ch=getchar())!='\n')
- {
- fputc(ch,fp);
- }
- fclose(fp);
- return 0;
- }
2.从文件中读出一个字符
用 fgetc 函数或者 getc 函数可以从磁盘中读出一个字符。
int fgetc(FILE * fp)
从磁盘文键逐个读入字符,并在终端输出
- #include<stdio.h>
- #include<stdlib.h>
- int main()
- {
- //从磁盘文键逐个读入字符,并在终端输出
- FILE * fp;
- char ch;
- if((fp=fopen("output1.txt","r"))==NULL)
- {
- printf("无法打开文件!\n");
- exit(0);
- }
- while((ch=fgetc(fp))!=EOF)
- {
- putchar(ch);
- }
- fclose(fp);
- return 0;
- }
3.向文件中写入一个字符串
用 fputs 函数可以把一个字符串输入到指定的流式文件中,其原型为
int fputs(char * fp,FILE * stream)
其中,string为字符串,stream为文件指针。
把指针string所指向的字符串输出到文件指针stream所指向的文件中,但字符串结束符‘\0’不输出。
从键盘输入若干行字符,把他们输出到磁盘文件中保存起来。
- #include<stdio.h>
- #include<stdlib.h>
- int main()
- {
- //从键盘输入若干行字符,把他们输出到磁盘文件中保存起来。
- FILE * fp;
- char string[81];
- if((fp=fopen("data.txt","w"))==NULL)
- {
- printf("未找到此文件!");
- exit(0);
- }
- while(gets(string)!=NULL)//ctrl+Z结束
- {
- fputs(string,fp);
- fputc('\n',fp);//在每个字符串后加一个换行符
- }
- fclose(fp);
- return 0;
- }
使用数据块的方式对二进制问价进行读写操作,涉及的函数有两个:fread() 和 fwrite() 。
建立学生档案文件,每个记录包括学生的姓名,性别,年龄和入学总分
- #include<stdio.h>
- #include<stdlib.h>
- struct student
- {
- char name[10];
- char sex;
- int age;
- float score;
- };
- int main()
- {
- FILE * fp;
- struct student stud;
- char str[80],ch='y';
- if((fp=fopen("stud2.rec","wb"))==NULL)//二进制只写方式打开
- {
- printf("无法打开文件!\n");
- exit(0);
- }
- while(ch=='y'||ch=='Y')
- {
- printf("输入姓名:");
- gets(stud.name);
- printf("输入性别:");
- gets(str);stud.sex=str[0];
- printf("输入年龄:");
- gets(str);stud.age=atoi(str);//年龄:将字符串转换为整型
- printf("输入分数:");
- gets(str);stud.score=atof(str);//分数:将字符串转换为浮点型
- fwrite(&stud,sizeof(stud),1,fp);//写入数据到文件
- do
- {
- printf("继续输入:(y/n)? ");
- gets(str);
- ch=str[0];
- } while(!(ch=='y'||ch=='n'||ch=='Y'||ch=='N'));
- }
- fclose(fp);
- return 0;
- }
从磁盘文件按记录读取数据,并显示读入的内容,直到文件尾
- #include<stdio.h>
- #include<stdlib.h>
- struct student
- {
- char name[10];
- char sex;//'M',或'F'
- int age;
- float score;
- };
- int main()
- {
- //从磁盘文件按记录读取数据,并显示读入的内容,直到文件尾
- struct student stud;
- FILE * fp;
- if((fp=fopen("stud2.rec","rb"))==NULL)
- {
- printf("无法打开文件stud2.rec!\n");
- exit(0);
- }
- while(fread(&stud,sizeof(stud),1,fp)==1)
- {
- printf("\n姓名:%s",stud.name);
- printf("\n性别:%c",stud.sex);
- printf("\n年龄:%d",stud.age);
- printf("\n分数:%.2f",stud.score);
- }
- printf("\n");
- fclose(fp);
- return 0;
- }
文件的定位:利用fesk()和ftell()函数编写程序测量一个文件的长度
- #include<stdio.h>
- #include<stdlib.h>
- //文件的定位
- //利用fesk()和ftell()函数编写程序测量一个文件的长度
- long filesize(FILE * fp)
- {
- long curpos,length;//当前文件读写位置指针相当于文件开头的位移量
- curpos=ftell(fp);//保存文件的当前读写位置指针
- fseek(fp,0L,SEEK_END);//文件读写位置指针置于文件尾端
- length=ftell(fp);//求文件长度
- fseek(fp,curpos,SEEK_SET);//恢复文件的原读写位置的指针
- return length;
- }
- long filesize(FILE * stream);
- int main()
- {
- FILE * stream;
- char filename[10];
- printf("\n输入文件名:");
- scanf("%s",filename);
- if((stream=fopen(filename,"rb"))==NULL)
- {
- printf("无法打开文件:%s\n",filename);
- exit(0);
- }
- printf("%s的文件大小是%ld(byte)\n",filename,filesize(stream));
- fclose(stream);
- return 0;
- }
随机读写:
由之前建立的学生入学档案的磁盘文件stud.rec中,假设学生按照分数升序排列。
现要求设计一个程序,输入一个整型值给n,输出分数最高的n个学生记录,即排在尾部的n个学生记录
- #include<stdio.h>
- #include<stdlib.h>
- struct student
- {
- char name[10];
- char sex;//'M',或'F'
- int age;
- float score;
- };
- //由之前建立的学生入学档案的磁盘文件stud.rec中,假设学生按照分数升序排列。
- //现要求设计一个程序,输入一个整型值给n,输出分数最高的n个学生记录,即排在尾部的n个学生记录
- int main()
- {
- FILE * fp;
- struct student stud;
- int n;
- if((fp=fopen("stud.rec","rb"))==NULL)
- {
- printf("无法打开文件");
- exit(0);
- }
- printf("\n请输入一个整数:");
- scanf("%d",&n);
- fseek(fp,-n*sizeof(stud),SEEK_END); //定位到倒数第n个学生记录
- while(fread(&stud,sizeof(stud),1,fp)==1)
- {
- printf("\n姓名:%s",stud.name);
- printf("\n性别:%c",stud.sex);
- printf("\n年龄:%d",stud.age);
- printf("\n分数:%.2f",stud.score);
- }
- return 0;
- }
将之前的成绩表中的女生成绩加五分
- #include<stdio.h>
- #include<stdlib.h>
- struct student
- {
- char name[10];
- char sex;//'M',或'F'
- int age;
- float score;
- };
- int main()
- {
- //从磁盘文件按记录读取数据,并显示读入的内容,直到文件尾
- struct student stud;
- FILE * fp;
- if((fp=fopen("stud.rec","rb"))==NULL)
- {
- printf("无法打开文件stud2.rec!\n");
- exit(0);
- }
- while(fread(&stud,sizeof(stud),1,fp)==1)
- {
- printf("\n姓名:%s",stud.name);
- printf("\n性别:%c",stud.sex);
- printf("\n年龄:%d",stud.age);
- printf("\n分数:%.2f",stud.score);
- }
- printf("\n");
- fclose(fp);
- return 0;
- }
输入一个学生的姓名,编写程序将stud.rec中该学生的记录删除
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- struct student
- {
- char name[10];
- char sex;//'M',或'F'
- int age;
- float score;
- };
- //输入一个学生的姓名,编写程序将stud.rec中该学生的记录删除
- int main()
- {
- char name[10];
- FILE * fp_old,* fp_new;
- struct student stud;
- if((fp_old=fopen("stud.rec","rb"))==0)//读方式打开原数据文件
- {
- printf("\n不能打开文件");
- exit(0);
- }
- if((fp_new=fopen("stud3.rec","wb"))==0)//写方式创建新数据文件
- {
- printf("\n不能创建文件");
- exit(0);
- }
- printf("请输入要删除的学生姓名:");
- gets(name);
- while(fread(&stud,sizeof(stud),1,fp_old)==1)
- {
- //在原文件中读取一个学生记录在stud中
- if(strcmp(stud.name,name)!=0)
- {
- fwrite(&stud,sizeof(stud),1,fp_new);
- }
- }
- fclose(fp_old);
- fclose(fp_new);
- remove("stud.rec");//删除原文件
- rename("stud3.rec","stud.rec"); //将新文件重命名
- return 0;
- }
向文件中插入数据
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- struct student
- {
- char name[10];
- char sex;//'M',或'F'
- int age;
- float score;
- };
- int main()
- {
- FILE * fp;
- struct student x,t={
- "Alex",'f',20,566
- };
- if((fp=fopen("stud.rec","a+b"))==0)
- {
- printf("\n\t无法打开文件!\n");
- exit(0);
- }
- fread(&x,sizeof(struct student),1,fp);//从文件中读一条学生记录
- fseek(fp,0L,SEEK_END);
- fwrite(&t,sizeof(struct student),1,fp);//将t中的数据追加到文件尾
-
- rewind(fp);
- while(fread(&x,sizeof(struct student),1,fp)==1)
- {
- printf("\n%15s%4c%8d%8.2f",x.name,x.sex,x.age,x.score);
- }
- fclose(fp);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。