/*************************************************************************
> File Name: liu.c
> Author: liujinlong
> Mail: ljl7ed@sina.com
> Created Time: 2014年03月13日 星期四 14时48分31秒
************************************************************************/
C语言输入/输出函数总结
2014年3月13日于图书馆
错误报告
标准库函数在一个外部整型变量errno(在errno.h中定义)中保存错误代码之后把这个信息传递给用户程序,提示操作失败的准确原因。
perror函数简化向用户报告这些错误的过程。他的原型定义于stdio.h,如下所示:
void perror(char const *message);
如果message不是NULL并且指向一个非空的字符串,perror函数就打印这个字符串,后面跟一个分号和一个空格,然后打印出一条用于解释error当前错误代码的信息。
打开流
fopen函数
FILE *fopen(char const *name,char const *mode)
如果fopen函数执行成功,它返回一个指向FILE结构的指针,该结构代表这个新创建的流。如果函数执行失败,它就返回一个NULL指针,errno会提示问题的性质。
关闭流
fclose函数
int fclose(FILE *f);
对于输入流,fclose函数在关闭之前刷新缓冲区。如果它执行成功,fclose返回零值,否则返回EOF。
字符I/O
getchar函数家族
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar(void); //getchar始终从标准输入读取
这些函数用于读取字符,但他们都返回一个int型值,而不是char型值。(主要是为了解决EOF,EOF被定义为整型,这样可以使其不与文件中的字符型冲突)
putchar函数家族
int fputc(int character,FILE *stream);
int putc(int character,FILE *stream);
int putchar(int character); /*在打印前,函数把这个整型参数裁剪为一个无符号字符型值。
在文件内部有一个位置指针。用来指向文件的当前读写字节。使用 fgetc 函数后,该位置指针将向后移动一个字节。 因此可连续多次使用 fgetc 函数,读取多个字符。应注意文件指针和文件内部的位置指针不是一回事。文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。
未格式化的行I/O
char *fgets(char *buffer,int buffer_size,FILE *stream)
/*fgets从指定的stream读取字符并把他们复制到buffer中。当它读取一个换行符并储存到缓冲区之后就不在读取。fgets返回它的第一个参数,用于检查是否到文件尾。其中的buffer_size是一个正整数。表示从文件中读出的字符串不超过buffer_size - 1个字符。在读入的最后一个字符后加上串结束标志'\0'。*/
char *gets(char *buffer);
int fputs(char const *buffer,FILE *stream); //如果写入时出错,fputs返回常量值EOF,否则它将返回一个非负值。
int puts(char const *buffer);
格式化的行I/O
scanf函数家族
int fscanf(FILE *stream,char const *format,..);
int scanf(char const *format,...); //函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。
int sscanf(char const *string,char const *format,...); //sscanf从第一个参数所给的字符串中读取字符
printf函数家族
int fprintf(FILE *stream, char const *format,... );
int printf(char const *format,...);
int sprintf(char *buffer,char const *format,...); //把它的结果作为一个NUL结尾的字符串存储到指定的buffer缓冲区而不是写入到流
三个函数的返回值都是实际打印或存储的字符数。