C标准I/O库

在这个帖子中,我们将要介绍I/O库中的下列库函数。

fopen、fclose
fread、fwrite
fflush-
fseek-
fgetc 、getc 、getchar
fputc 、putc 、putchar
fgets 、gets
printf 、fprintf 、sprintf
scanf 、fscanf 、sscanf
首先是fopen函数。fopen函数的函数原型如下:
#include<stdio.h>
FILE *fopen(const char *filename, const char *mode);
fopen 打开由filename参数指定的文件,并且把它与一个文件流关联起来。mode参数指定文件的打开方式。
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读数据。
rw+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
fopen成功时返回一个非空的FILE *指针,失败时返回NULL值,NULL值在stdio.h里定义。

fread函数,函数原型如下:

#include<stdio.h>
size_t fread(void *ptr,size_t size,size_t nitems,FILE *stream);

fread 从文件流stream中读到由ptr指向的数据缓冲区里。size指定每个数据记录的长度。计数器nitems给出要传输的记录的个数。

返回值是成功读到数据缓冲区里的记录的个数。当到达文件结尾时,它的返回值可能会小于nitems,甚至可以是0。

fwrite函数,函数原型如下:

#include<stdio.h>
size_t fwrite(const void *ptr,size_t size,size_t nitems ,FILE *stream);

不推荐把fread和fwrite用于结构化数据,因为不同计算机体系结构之间可能不具备可移植性。

fclose函数,函数原型如下:

#include<stdio.h>
int fclose(FILE *stream);

用于关闭stream指定的文件流。

fflush函数,函数原型如下:

#include<stdio.h>
int fflush(FILE *stream);

作用是把文件流离得所有未写出的数据立刻写出。你可以用这个函数来确保在试图读入一个用户相应之前,先向终端送出一个交互提示符。

调用fclose之前默认隐含的调用了一次fflush();

fseek函数,函数原型如下:

#include<stdio.h>
int fseek(FILE *stream,long int offset,int whence);

作用是与lseek系统调用对应的文件流函数。它在文件流里为下一次读写操作指定位置。

fgetc getc getchar函数,函数原型如下:

#include<stdio.h>
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar();

fgetc函数从文件流里取出下一个字节并把它作为一个字符返回。

getc 的作用与fgetc的作用一样,但是有可能被实现为一个宏。

getchar的作用是相当于getc(stdin),它是从标准输入里读取下一个字符。

fputc putc putchar函数,函数原型如下:

#include<stdio.h>
int fputc(int c,FILE *stream);
int put(int c,FILE *stream);
int putchar(int c);

fputc函数把一个字符写到输出文件流里面。

putc函数与fputc作用一样,但是它有可能被实现为一个宏。

putchar相当于把单个字符写到标准输出里面。

fgets gets函数,函数原型如下:

char *fgets(char *s, int n,FILE *stream);
char *gets(char *s);

fgets从stream文件流中读取一个一个字符串,用s指向指向这个字符串。直到出现下面某种情况:遇到换行符,已经传输了n-1个字符,或者到达文件尾。

它会把遇到的换行符也传递到字符串里,再加上一个表示结尾的'\0'.,所以每次做多只能传输n-1个字符。

gets从标准输入中读取一个字符串。它在接受的字符串的尾部加上一个null。

格式化输入输出:

printf() sprintf() fprintf()函数,函数原型如下:

#include<stdio.h>
int printf(const char *format,...);
int sprintf(char *s,const char *format,...);
int fprintf(FILE *stream,const char *format,...);

printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出

sprintf()字串格式化命令,主要功能是把格式化的数据写入某个字符串中。

fprintf()函数根据指定的format(格式)(格式)发送信息(参数)到由stream(流)指定的文件. fprintf()只能和printf()一样工作. 

fprintf()的返回值是输出的字符数,发生错误时返回一个负值.

 

format格式:

  %% 印出百分比符号,不转换。

  %c 整数转成对应的 ASCII 字元。

  %d 整数转成十进位。

  %f 倍精确度数字转成浮点数。

  %o 整数转成八进位。

  %s 整数转成字符串。

  %x 整数转成小写十六进位。

  %X 整数转成大写十六进位。

scanf() fscanf() sscanf()函数,函数原型如下:

#include<stdio.h>
int scanf(const char *format,...);
int fscanf(char *s,const char *format,...);
int sscanf(FILE *stream,const char *format,...);

sscanf() - 从一个字符串中读进与指定格式相符的数据.

scanf()从标准输入中读取指定的输入

fscanf()从文件中读入一个指定的输入

格式说明符

  转换字符(就是%后跟的部分)

  a 读浮点值(仅适用于 C99)

  A 读浮点值(仅适用于 C99)

  c 读单字符

  d 读十进制整数

  i 读十进制、八进制、十六进制整数

  e 读浮点数

  E 读浮点数

  f 读浮点数

  F 读浮点数(仅适用于 C99)

  g 读浮点数

  G 读浮点数

  o 读八进制数

  s 读字符串

  x 读十六进制数

  X 读十六进制数

  p 读指针值

  n 至此已读入值的等价字符数

  u 读无符号十进制整数

  [ ] 扫描字符集合

  % 读 % 符号(百分号)

  附加格式说明字符表修饰符说明

  L/l 长度修饰符 输入"长"数据

  h 长度修饰符 输入"短"数据

  W 整型常数 指定输入数据所占宽度

  * 表示本输入项在读入后不赋值给相应的变量

 

  %% 印出百分比符号,不转换。

  %c 整数转成对应的 ASCII 字元。

  %d 整数转成十进位。

  %f 倍精确度数字转成浮点数。

  %o 整数转成八进位。

  %s 整数转成字符串。

  %x 整数转成小写十六进位。

  %X 整数转成大写十六进位。



你可能感兴趣的:(C标准I/O库)