专题九:I/O流与标准库
1. IO流的打开和关闭
FILE* fopen (
constchar* filename, //文件路径
const char* mode // 打开模式
);
打开模式:
r: 读
w: 写
a: 追加
r+: 读写,文件必须存在,从头开始
w+: 写读,文件不存在就创建,文件存在就清空
a+: 读写,文件不存在就创建,文件存在就追加
b: 二进制方式
UNIX/Linux:二进制方式作用不大
Windows:二进制方式,对读写内容不做任何转换。非二进制方式,写入\n,实际写入\r\n,文件中\r\n,读到的\n。
返回值是IO流结构体指针,用户调用其他IO流函数。
int fclose (
FILE* fp // fopen的返回值
);
成功返回0,否则返回EOF。
以下标准IO流是默认打开的:
stdout: 标准输出
stdin: 标准输入
stderr: 标准出错
2. 格式化IO
int fprintf (
FILE* stream, // IO流指针
const char* format,// 格式字符串
... // 输出数据项
);
printf(...)实际就是fprintf (stdout, ...)
格式字符串:
%[标志][宽度][.精度][h|l|ll]类型符
标志:
- 左对齐
+ 输出正负号
# 输出进制标识
0 用0填充
宽度.精度:123.34,宽度6,精度2,%6.2f
h short
l long/double
ll longlong
类型符:
d 十进制整数
c 字符
s 空字符结尾的字符串
f 浮点数
x/X 十六进制整数
o 八进制整数
p 地址(十六进制)
u 无符号十进制整数
g 浮点数(自动选择最短形式)
e 浮点数(科学计数法)
int fscanf (
FILE*stream, // IO流指针
constchar* format, // 格式字符串
...// 地址表
);
1)以空白字符(空格、制表、换行)作为数据分隔符。
2)模式匹配:根据格式化字符串的模式进行匹配,从中提取数据。
3)禁止赋值:*
4)字符集表示:只读取某个特定字符集中的字符,只要遇到字符集以外的字符即刻返回。
3. 非格式化IO
int fputc (
intc, // 字符
FILE*stream // IO流指针
);
成功返回c,失败返回EOF。
int fgetc (
FILE*stream // IO流指针
);
成功返回读到的字符,失败或者遇到文件尾返回EOF。
int fputs(
constchar* str, //输出的字符串
FILE*stream //IO流指针
);
int fgets(
charbuf[], //缓冲区
intn, //缓冲区大小
FILE*stream
);
1. 二进制IO
size_t fread(
void*buf, // 缓冲区指针
size_tsize, // 期望读取的数据单元字节数
size_tcount, // 期望读取的数据单元数
FILE*stream // IO流指针
);
成功返回实际读取的数组单元数。失败<0。
size_t fwrite(
void*buf, // 缓冲区指针
size_tsize, // 期望写入的数据单元字节数
size_tcount, // 期望写入的数据单元数
FILE* stream // IO流指针
);
成功返回实际写入的数据单元数,失败<0