问题

UNIX下有一个命令cat,其用法为:
  cat x.c y.c z.c …

其在标准输出(屏幕)上依次显示每个文件内容。如果没有文件名,则显示标准输入中的内容,它类似于Windows的Command环境下的type命令。

算法设计

主要算法如下:
  If 没有命令行参数
    从标准输入中读取内容并显示到屏幕上;
  Else
    While 还有文件未读取
      打开文件;
        从文件输入中读取内容并显示到屏幕上;
        关闭文件;

算法实现

#include <stdio.h>
#include <stdlib.h>//exit(1)在该文件中
void fileCopy(FILE *fp);

int main(int argc,char **argv)
{
FILE *fp;
int i=1; //从第二个参数开始输出,第一个为程序路径+名称

if(argc == 1){
fileCopy(stdin); //如果没有参数,则输入什么输出什么
}else{
while( i<argc){
if((fp=fopen(argv[i],"r")) == NULL){
fprintf(stderr,"cat: can't open %s\n",*(argv+i));
exit(1);
}else{
fileCopy(fp);
fclose(fp);
}
i++;
}
}

exit(0);
}
void fileCopy(FILE *fp){
int c;
// while((c=fgetc(fp)) != EOF)
// fputc(c,stdout);
//最好使用如下代码,对于二进制文件不可以使用EOF(-1)来判断读取结束(最后一个byte的后一个位置)
while(!feof(fp)){
c = fgetc(fp);
fputc(c,stdout);
}
}

程序执行结果如下:

cat指令输出_cat