1.4 fgetc,fputc
int getchar(void);
getchar函数等同于getc(stdin)。从标准输入读取一个字符
int getc(FILE *stream);
返回值:返回值是usigned char 但是我们用int类型来对待
一般会被定义成宏来使用
int fgetc(FILE *stream);
与getc函数相同,但是一般会被定义成函数使用
宏与函数:
宏不占用调度时间,只占用编译时间;
函数占用调度时间,不占用编译时间;
引子:
putchar(c); is equivalent to putc(c, stdout).
输出指向标准输出
int fputc(int c, FILE *stream);
输出到指定流文件
范例1:文件复制
/*./mycpy src dest*/ /*功能,使用fputc fgetc 实现文件复制功能*/ /* argv[1]:src argv[2]:dest */ #include <stdio.h> #include <stdlib.h> int main(int argc , char **argv) { FILE *fps ; FILE *fpd ; int ch; if(argc < 3) { fprintf(stderr,"Usage:%s <src.file> <dest.file>\n",argv[0]); exit(1); } //打开源 fps = fopen(argv[1],"r"); if(fps == NULL) { perror("fopen()"); exit(1); } //打开目标流 fpd = fopen(argv[2],"w+"); if(fpd == NULL) { perror("fopen()"); fclose(fps);// 目标流打开失败后,要将源流关闭 exit(1); } while(1) { ch = fgetc(fps); if(ch == EOF)//如果读到文件尾或者读出错 break; fputc(ch,fpd); } fclose(fpd); fclose(fps); exit(0); }
范例二:计算一个文件的大小(fgetc fputc使用)
/* 计算一个文件的大小 */ #include <stdio.h> #include <stdlib.h> int main(int argc ,char **argv) { FILE *fp ; int ch = 0 ; int count = 0 ; if(argc < 2) { fprintf(stderr ,"Usage:....\n"); exit(1); } fp = fopen(argv[1],"r"); if(fp == NULL ) { perror("fopen()"); exit(1); } while(1) { ch = fgetc(fp); if(ch == EOF) break; count++; } fprintf(stdout,"count = %d\n",count); fclose(fp); exit(1); }