当前位置: 首页 > news >正文

C语言-文件操作-9

题目:

修改下列程序,用命令行界面代替交互式界面

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define BUFSIZE 4096

#define SLEN 81

void append(FILE * source,FILE * dest);

char * s_gets(char * st,int n);

int main(){

FILE * fa, * fs;

int files = 0;

char file_app[SLEN];

char file_src[SLEN];

int ch;

puts("Enter name of destination file: ");

s_gets(file_app,SLEN); //输入目标文件名

if((fa = fopen(file_app,"a+")) == NULL){

fprintf(stderr,"cant't open %s\n",file_app);

exit(EXIT_FAILURE);

}

if(setvbuf(fa,NULL,_IOFBF,BUFSIZE) != 0){

fputs("Can't create output buffer\n",stderr);

exit(EXIT_FAILURE);

}

puts("Enter name of first source file (empty line to quit): ");

while(s_gets(file_src,SLEN) && file_src[0] != '\0'){

if(strcmp(file_src,file_app) == 0) fputs("Can't append file to itself\n",stderr);

else if((fs = fopen(file_src,"r")) == NULL) fprintf(stderr,"Can't open %s\n",file_src);

else{

if(setvbuf(fs,NULL,_IOFBF,BUFSIZE) != 0){

fputs("Cant's append file to itself\n",stderr);

continue;

}

append(fs,fa);

if(ferror(fs) != 0) fprintf(stderr,"Error in reading file %s.\n",file_src);

if(ferror(fa) != 0) fprintf(stderr,"Error in writing file %s.\n",file_app);

fclose(fs); //关闭读取文件,继续下一次的读取

files++;

printf("File %s appended.\n",file_src);

puts("Next file (empty line to quit): ");

}

}

printf("Done appending. %d files appended.\n",files);

rewind(fa);

printf("%s contents:\n",file_app);

while((ch = getc(fa)) != EOF) putchar(ch);

puts("Done displaying.");

fclose(fa);

return 0;

}

void append(FILE * source,FILE * dest){

size_t bytes;

static char temp[BUFSIZE];

while(( bytes = fread(temp,sizeof(char),BUFSIZE,source)) > 0){

fwrite(temp,sizeof(char),bytes,dest);

}

}

char * s_gets(char * st,int n){

char * ret_val;

char * find;

ret_val = fgets(st,n,stdin);

if(ret_val){

find = strchr(st,'\n');

if(find) *find = '\0';

else{

while(getchar() != '\n')

continue;

}

}

}

源代码:

#include <stdio.h> #include <stdlib.h> #include <string.h> #define BUFSIZE 4096 #define SLEN 81 void append(FILE * source,FILE * dest); char * s_gets(char * st,int n); int main(int argc,char * argv[]){ FILE * fa, * fs; int files = 0; int ch; if((fa = fopen(argv[1],"a+")) == NULL){ fprintf(stderr,"cant't open %s\n",argv[1]); exit(EXIT_FAILURE); } if(setvbuf(fa,NULL,_IOFBF,BUFSIZE) != 0){ fputs("Can't create output buffer\n",stderr); exit(EXIT_FAILURE); } for(int i = 2;i <= argc-1;i++){ if(strcmp(argv[i],argv[1]) == 0) fputs("Can't append file to itself\n",stderr); else if((fs = fopen(argv[i],"r")) == NULL) fprintf(stderr,"Can't open %s\n",argv[i]); else{ if(setvbuf(fs,NULL,_IOFBF,BUFSIZE) != 0){ fputs("Cant's append file to itself\n",stderr); continue; } append(fs,fa); if(ferror(fs) != 0) fprintf(stderr,"Error in reading file %s.\n",argv[i]); if(ferror(fa) != 0) fprintf(stderr,"Error in writing file %s.\n",argv[1]); fclose(fs); //关闭读取文件,继续下一次的读取 files++; printf("File %s appended.\n",argv[i]); } } printf("Done appending. %d files appended.\n",files); rewind(fa); printf("%s contents:\n",argv[1]); while((ch = getc(fa)) != EOF) putchar(ch); puts("\nDone displaying."); fclose(fa); return 0; } void append(FILE * source,FILE * dest){ size_t bytes; static char temp[BUFSIZE]; while(( bytes = fread(temp,sizeof(char),BUFSIZE,source)) > 0){ fwrite(temp,sizeof(char),bytes,dest); } } char * s_gets(char * st,int n){ char * ret_val; char * find; ret_val = fgets(st,n,stdin); if(ret_val){ find = strchr(st,'\n'); if(find) *find = '\0'; else{ while(getchar() != '\n') continue; } } }

演示效果:


如果朋友你感觉文章的内容对你有帮助,可以点赞关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈

http://www.jsqmd.com/news/1161611/

相关文章:

  • 选安提瓜护照前,先看懂这几点好处和机构门道 - GrowthUME
  • 镇江京口区黄金回收实体店实测测评|5 家合规商家实力横向对比,本地变现避坑指南 - 铂衡汇黄金珠宝
  • LinkSwift:9大网盘直链解析神器终极指南 - 免费获取真实下载地址的高效方案
  • AppleRa1n:iOS 15-16激活锁绕过终极指南,让被锁设备重获新生
  • DailyTech-20260709
  • 自动格式化失效?Cursor AI中Prettier不生效的7种隐性原因,今天必须解决!
  • 赣州6家黄金回收实地测评|亲身卖金全程对比,按交易流程打分排名 - 小路路在天舞
  • 天梭官方售后服务中心地址及热线电话实地考察报告+多信源验证(2026年7月更新) - 天梭服务中心
  • 从零开始设计梦想岛屿:Happy Island Designer 完全指南
  • 顺序表-线性表
  • Honey Select 2终极增强补丁:三步解决语言障碍与功能限制
  • 求推荐蒸汽涡街流量计品牌 3个核心问题帮你理清 - 信息热点
  • Grounding DINO
  • Unity VR曲面UI插件开发:从网格变形到交互适配的完整实现
  • 如何用Video2X将老旧视频一键修复成高清画质?完整教程指南
  • 2026三亚田独黄金回收深度盘点|本地正规门店筛查+真实行情计价+避坑全集 - 清月黄金回收
  • ChatGPT Canvas实时协作画布深度解密(企业级知识图谱搭建实录)
  • (15-4)
  • 【算法与数据结构】二分法及其应用
  • 2026长沙翡翠臻品合规回收实测:六区两市一县全域服务网络与透明变现权威指南 - 分享测评官
  • iOS 27家庭App AI摄像头:智能安防技术解析与实践指南
  • 致远协同管理软件,覆盖政企全场景的一体化 OA 协同办公平台
  • DDrawCompat深度解析:Windows系统下DirectDraw兼容性解决方案
  • 8大网盘直链下载难题与开源解决方案:LinkSwift技术深度解析
  • ThinkPad X230能否成为你的第一台黑苹果设备?深度解析与实战指南
  • STM32与TLE 6208-6G直流电机控制方案详解
  • REPENTOGON完整安装指南:如何为《以撒的结合:悔改》安装革命性脚本扩展器
  • 2026年成都办公家具高性价比推荐指南 - 谁都没有我好看
  • MetaboAnalystR终极指南:从质谱数据到生物学洞察的完整代谢组学分析解决方案
  • 2026年石家庄哪里回收劳力士手表价格高?桥西区城角街672号赵掌柜二奢专业回收梵克雅宝,芝伯,萧邦,雅典 - GrowthUME