历年全国青少年信息学奥林匹克联赛程序设计试卷题库 (8)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
s_n(struct mem apeo[],int bn)
{
FILE *wfp;
int i;
wfp=fopen("m_info","wb+");
if(wfp!=NULL)
{
for(i=0;i { if(fwrite(&apeo[i],sizeof(struct mem),1,wfp)!=1) printf("\t\t\t\tfile write error\n"); } } else printf("fail to open file\n"); fclose(wfp); } 上面是一个实例,主要是用fread();来读,用fwrite();来写。 格式为fread(buffer,size,count,fp);其中buffer是一个指针,它指向用来存储读出数据的地址。 size是每次读出数据的大小,count是连续读多少次;fp也是一个(文件)FILE类型的指针,它指被读取数据的文件。 fwrite(buffer,size,count,fp)大致一样就是buffer变成指向存储待写入数据的地址,fp 指向存储地址; 另外使用两个函数之前还要用fp=fopen("save.txt","r+");这个函数来打开文件 "save.txt"为文件名,,"r+"为打开方式,r+为以可读可写的方式打开一个文件 "+"为以可读可写的方式创建一个文件; 这是按照学号排序并写入二进制文件,那怎么排序并且写出文本文件并且读出这些信息呢?结构体定义中有 struct Student { int num; /*学号*/ char name[10]; /*姓名*/ int grades[M]; /*共有M 们功课*/ int total; /*总分*/ int rank; /*排名*/ char sex[4]; /*性别*/ }Stu[N]; void Selection_num(struct Student *st,int n) { FILE *fp; int i,j,min,z; struct Student temp; for(i=0;i { min=i; for(j=i+1;j { if(st[j].num min=j; } if(min!=i) { temp=st[i]; st[i]=st[min]; st[min]=temp; } } if((fp=fopen("stu_info.dat","w+"))==NULL) { printf("can not open file! "); exit (0); } for(z=0;z { if(fwrite(&st[z],sizeof(struct Student),1,fp)!=1) printf("File write error\n"); } } 如何用c语言读一个文本文件,然后写入一个字符串 问题是字符串在定义的时候要写清大小,无论如何实现最后都要合成一个字符串。 #include void read(FILE *f,int len); int main(void){ int i,len; FILE *ifp; len=1; ifp=fopen("c:\a.txt","r"); while((i=getc(ifp))!=EOF){ len=len+1; } read(ifp,len); } void read(FILE *f,int l){ int i; char text[]=(char *)malloc(sizeof(char)*10); for(i=0;i text[i]=getc(f); printf("%c",text[i]); } } C中如何在一个文件开头写入文本 要在一个文件开头就写入str,但不删除下面本来的文本内容,在写入前先指定了指针到文件开头,怎么没用,该怎么做呢? fseek(fp[i],0,0); fprintf(fp[i], "%s\n", str); 是用的添加模式,a,但是都添加到文件的最后面去了,我要添加在文件的最开头 fseek试了好几种,都无法改变添加在最后的情况. ------解决思路---------------------- 先读出已有的所有内容到内存,再直接覆盖写入新的头部内容,最后把原有的内容写回去------解决思路---------------------- 应该是你 fseek 的问题 设置为0, 当用"a"打开文件的话,应该是自动到文件末尾了啊 ------解决思路---------------------- 文件操作只能覆盖或者追加,没有插入这个东东滴。 想要实现的话,自己编代码吧~~~~!!! ------解决思路---------------------- 没有办法直接写入,因为你二进制文本是写在硬盘上的,写入了某个扇区,数据是没有办法移动的,只能在后面追加,但是如果这个文本文件不是已存在的,而是在写入过程中突然发现掉了某一字符串,这时可以通过流指针来改变写入的位置,如果文本已存在,而是二次更新的话,那么只能把文本中的数据读入某个存储区域,重新排列后在写入文本,这样就可以达到楼主的目的。 如何用c语言读一个文本文件,然后将读入的字符写入一个字符串中?问题是字符串在定义的时候要写清大小,无论如何实现最后都要合成一个字符串。 #include void read(FILE *f,int len); int main(void){ int i,len; FILE *ifp;