C语言程序设计新编教程(第2版)答案第9章 文件 习题答案_第1页
C语言程序设计新编教程(第2版)答案第9章 文件 习题答案_第2页
C语言程序设计新编教程(第2版)答案第9章 文件 习题答案_第3页
C语言程序设计新编教程(第2版)答案第9章 文件 习题答案_第4页
C语言程序设计新编教程(第2版)答案第9章 文件 习题答案_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章文件习题答案1.下面的程序有什么问题?intmain(void){int*fp;intk;fp=fopen("gelatin");for(k=0;k<30;k++)fputs(fp,"Nanetteeatsgelatin");fclose("gelatin");return0;}答:因为程序有文件定义,所以应该有#include<stdio.h>。应该把fp声明为文件指针FILE*fp;函数fopen()需要一种模式:fopen(“gelatin”,”w”)或者a模式。Fputs函数中的参数的次序应该反过来,为了清楚,输出字符串应该具有一个换行符,因为fputs并不会自动添加它。Fclose函数需要一个文件指针而不是文件名:fclose(fp)。以下为正确的版本#include<stdio.h>intmain(void){FILE*fp;intk;fp=fopen("gelatin","w");/*用亍创建可冐文件gelatin但赋值给一个文件指针*/for(k=0;k<30;k++)/*循环输出*/fputs("Nanetteeatsgelatin\n",fp);fclose(fp);/*关闭文件*/return0;}2.编写一个程序,将任意数目的字符串写入文件。字符串由键盘输入。#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>#defineBUFFER_SIZE50char*read_string(char*buffer,int*pbuffer_size);intmain(void){FILE*pFile=NULL;char*filename="d:\\myfile.txt";charanswer='n';size_tstr_length=0;intbuffer_size=BUFFER_SIZE;char*buffer=malloc(buffer_size);pFile=fopen(filename,"w");if(!pFile){printf("Erroropening%sforwriting.Programterminated.",filename);exit(1);}do{/*从键盘输入字符串*/printf("Enterastring:\n");read_string(buffer,&buffer_size);str_length=strlen(buffer);fwrite(&str_length,sizeof(size_t),1,pFile);fwrite(buffer,str_length,1,pFile);printf("Doyouwanttoenteranother(yorn)?");scanf("%c",&answer);fflush(stdin);}while(tolower(answer)=='y');fclose(pFile);printf("\nFilewritecomplete\n");if(buffer)free(buffer);return0;}/*从键盘读取字符串*//*如果字符串超过buffer文件大小*//*buffer文件自动增加*/char*read_string(char*buffer,int*pbuffer_size){char*temp=NULL;intposition=0;while((buffer[position++]=getchar())!='\n')if(position>=*pbuffer_size-1){/*Increasethesizeofthebuffer*/*pbuffer_size+=BUFFER_SIZE;temp=(char*)malloc(*pbuffer_size);buffer[position]='\0';strcpy(temp,buffer);free(buffer);buffer=temp;temp=NULL;}buffer[position-1]='\0';returnbuffer;}3.编写一个程序,获取用户输入文件名,如存在,则写入从键盘输入的字符串;如不存在,先创建,再获取键盘输入后写入。#include<stdio.h>#include<process.h>main(){ FILE*fp; charfilename[30],str[30];/*定义两个字符型数组*/ printf("pleaseinputfilename:\n"); scanf("%s",filename);/*输入文件名*/ fp=fopen(filename,"w+"); printf("pleaseinputstring:\n");/*提示输入字符串*/ getchar(); gets(str); fputs(str,fp);/*将字符串写入fp所指向的文件中*/ fclose(fp);}4.编写一个文件查看器,它可以将文件显示为十六进制和字符方式。#include<stdio.h>#include<ctype.h>#include<string.h>constintMAXLEN=256;constintDISPLAY=80;constintPAGE_LENGTH=20;intmain(intargc,char*argv[]){charfilename[MAXLEN];FILE*pfile;unsignedcharbuffer[DISPLAY/4-1];intcount=0;intlines=0;inti;if(argc==1){printf("Pleaseenterafilename:");fgets(filename,MAXLEN,stdin);intlen=strlen(filename);if(filename[len-1]=='\n')filename[len-1]='\0';}elsestrcpy(filename,argv[1]);if(!(pfile=fopen(filename,"rb"))){printf("Sorry,can'topen%s",filename);return-1;}while(!feof(pfile)){if(count<sizeofbuffer)buffer[count++]=(unsignedchar)fgetc(pfile);else{for(count=0;count<sizeofbuffer;count++)printf("%02X",buffer[count]);printf("|");for(count=0;count<sizeofbuffer;count++)printf("%c",isprint(buffer[count])?buffer[count]:'.');printf("\n");count=0;if(!(++lines%PAGE_LENGTH))if(getchar()=='E')return0;}}for(i=0;i<sizeofbuffer;i++)if(i<count)printf("%02X",buffer[i]);else

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论