6.5.3 输入输出

文件打开之后,根据一次读写文件中字符的数目可分为字符输入输出、行输入输出和格式化输入输出,下面分别对这3 种不同的方式进行讨论。
1.字符输入输出
字符输入输出函数一次仅读写一个字符。其中字符输入输出函数如表6.20和表6.21所示。
表6.20 字符输出函数语法要点
所需头文件#include <stdio.h>
函数原型
int getc(FILE * stream)
int fgetc(FILE * stream)
int getchar(void)
函数传入值stream:要输入的文件流
函数返回值
成功:下一个字符
失败:EOF
表6.21 字符输入函数语法要点
所需头文件#include <stdio.h>
函数原型
int putc(int c,FILE * stream)
int fputc(int c,FILE * stream)
int putchar(int c)
函数返回值
成功:字符c
失败:EOF
这几个函数功能类似,其区别仅在于getc 和putc 通常被实现为宏,而fgetc 和fputc 不
能实现为宏,因此,函数的实现时间会有所差别。
下面这个实例结合fputc和fgetc,将标准输入复制到标准输出中去。
/*fput.c*/
#include<stdio.h>
main()
{
int c;
/*把fgetc的结果作为fputc的输入*/
fputc(fgetc(stdin),stdout);
}
运行结果如下所示:
[root@localhost file]# ./file
w(用户输入)
w(屏幕输出)
2.行输入输出
行输入输出函数一次操作一行。其中行输入输出函数如表6.22 和表6.23 所示。
表6.22 行输出函数语法要点
所需头文件#include <stdio.h>
函数原型char * gets(char *s)
char fgets(char * s,int size,FILE * stream)
函数传入值
s:要输入的字符串
size:输入的字符串长度
stream:对应的文件流
函数返回值成功:s
失败:NULL
表6.23 行输入函数语法要点
所需头文件#include <stdio.h>
函数原型int puts(const char *s)
int fputs(const char * s,FILE * stream)
函数传入值s:要输出的字符串
stream:对应的文件流
函数返回值
成功:s
失败:NULL
这里以gets和puts为例进行说明,本实例将标准输入复制到标准输出,如下所示:
/*gets.c*/
#include<stdio.h>
main()
{
char s[80];
/*同上例,把fgets的结果作为fputs的输入*/
fputs(fgets(s,80,stdin),stdout);
}
运行该程序,结果如下所示:
[root@www yul]# ./file2
This is stdin(用户输入)
This is stdin(屏幕输出)
3.格式化输入输出
格式化输入输出函数可以指定输入输出的具体格式,这里有读者已经非常熟悉的printf、
scanf等函数,这里就简要介绍一下它们的格式。如下表6.24~表6.26 所示。
表6.24 格式化输出函数1
所需头文件#include <stdio.h>
函数原型
int printf(const char *format,…)
int fprintf(FILE *fp,const char *format,…)
int sprintf(char *buf,const char *format,…)
函数传入值
format:记录输出格式
fp:文件描述符
buf:记录输出缓冲区
函数返回值
成功:输出字符数(sprintf返回存入数组中的字符数)
失败:NULL
表6.25 格式化输出函数2
所需头文件#include <stdarg.h>
#include <stdio.h>
函数原型
int vprintf(const char *format,va_list arg)
int vfprintf(FILE *fp,const char *format,va_list arg)
int vsprintf(char *buf,const char *format,va_list arg)
函数传入值
format:记录输出格式
fp:文件描述符
arg:相关命令参数
函数返回值
成功:存入数组的字符数
失败:NULL
表6.26 格式化输入函数
所需头文件#include <stdio.h>
函数原型
int scanf(const char *format,…)
int fscanf(FILE *fp,const char *format,…)
int sscanf(char *buf,const char *format,…)
函数传入值
format:记录输出格式
fp:文件描述符
buf:记录输入缓冲区
函数返回值
成功:输出字符数(sprintf返回存入数组中的字符数)
失败:NULL
由于本节的函数用法比较简单,并且比较常用,因此就不再举例了,请读者需要用到时自行查找其用法。

Leave a Reply