I/O函数的三种方式:单个字符,文本行,二进制数据
单个字符
输入函数:
int getchar( void );
从标准输入里读取下一个字符,相当于getc(stdin)。返回类型为int型,为用户输入的ASCII码,出错返回-1。
int getc( FILE *stream );
和getchar功能一样,从指定的文件流中读取一个字符,读取后文件指针不会移动
getc(stdin)=getc
int fgetc( FILE *stream );
从文件指针stream指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节
输出函数:
int putchar( int c );
向标准输出(终端)输出一个字符c。
int putc( int c, FILE *stream );
输出一字符到指定流中。
putc(c,stdout)=putc(c)
int fputc( int c, FILE *stream );
将字符ch写到文件指针fp所指向的文件的当前写指针的位置。向文件写入一个字符后,文件读写位置指针向后移动一个字节。
fputc()与putc()等价
文本行
输入函数:
char *gets( char *buffer );
从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取
char *fgets( char *string, int n, FILE *stream );
从文件结构体指针stream中读取数据,每次读取一行。
键盘输入gets(buf)=fgets(buf,n,stdin)
输出函数:
int puts( const char *string );
向标准输出设备(屏幕)输出字符串并换行,具体为:把字符串输出到标准输出设备,将’\0’转换为回车换行
int fputs( const char *string, FILE *stream );
向指定的文件写入一个字符串(不自动写入字符串结束标记符’\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为非负整数;否则返回EOF
二进制数据
输入函数:
size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
从文件流中读数据,读取的内容放入buffer中,最多读取count个项,每个项size个字节,如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回 0。
输出函数:
size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );
向文件写入一个数据块,写入buffer中的内容,一共count个项,每个项大小为size个字节,如果执行成功则返回实际写入的项个数
格式化输入函数:
int scanf( const char *format [,argument]... );
按用户指定的格式从键盘上把数据输入到指定的变量之中。
int fscanf( FILE *stream, const char *format [, argument ]... );
根据数据格式(format)从输入流(stream)中写入数据(argument);与fgets的差别在于:fscanf遇到空格和换行时结束,注意空格时也结束,fgets遇到空格不结束。
int sscanf( const char *buffer, const char *format [, argument ] ... );
从一个字符串中读进与指定格式相符的数据
sscanf会从buffer里读进数据,依照format的格式将数据写入到argument里
sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。
sscanf()用法很多,它可以取指定长度的字符串,也可以过滤不想要的字符,只接收指定的字符集
可以用来控制接收用户的输入内容
下面两篇博客讲的非常详细:
https://blog.youkuaiyun.com/vitalia/article/details/52474761
https://blog.youkuaiyun.com/lh__huahuan/article/details/38405987
格式化输出函数:
int printf( const char *format [, argument]... );
向标准输出设备按规定格式输出信息
int fprintf( FILE *stream, const char *format [, argument ]...);
根据参数format 字符串来转换并格式化数据, 然后将结果输出到参数stream 指定的文件中, 直到出现字符串结束(‘\0’)为止
int sprintf( char *buffer, const char *format [, argument] ... );
把格式化的数据写入某个字符串
返回值:字符串长度(strlen)
感觉应该把sprintf和sscanf放在一起,因为它们两个的参数一样,好多次分不清这两个函数。
sprintf刚好和sscanf反过来,sprintf将argument按format的格式写入到buffer字符串中
可以用来连接字符串