标准c输入输出函数
clearerr
语法:
1 |
|
clearerr
函数重置错误标记和给出的流的EOF
指针. 当发生错误时,你可以使用perror()
判断实际上发生了何种错误.
fclose
语法:
1 |
|
函数fclose()
关闭给出的文件流, 释放已关联到流的所有缓冲区. fclose()
执行成功时返回0,否则返回EOF
.
feof
语法:
1 |
|
函数feof()
在到达给出的文件流的文件尾时返回一个非零值.
ferror
语法:
1 |
|
ferror()
函数检查stream
(流)中的错误, 如果没发生错误返回0,否则返回非零. 如果发生错误, 使用perror()
检测发生什么错误.
fflush
语法:
1 |
|
如果给出的文件流是一个输出流,那么fflush()
把输出到缓冲区的内容写入文件. 如果给出的文件流是输入类型的,那么fflush()
会清除输入缓冲区. fflush()
在调试时很实用,特别是对于在程序中输出到屏幕前发生错误片段时. 直接调用 fflush( STDOUT )
输出可以保证你的调试输出可以在正确的时间输出.
1 | printf( "Before first call\n" ); |
fgetc
语法:
1 |
|
fgetc()
函数返回来自stream
(流)中的下一个字符,如果到达文件尾或者发生错误时返回EOF
.
fgetpos
语法:
1 |
|
fgetpos()
函数保存给出的文件流(stream
)的位置指针到给出的位置变量(position
)中. position
变量是fpos_t
类型的(它在stdio.h
中定义)并且是可以控制在FILE
中每个可能的位置对象. fgetpos()
执行成功时返回0,失败时返回一个非零值.
fgets
语法:
1 |
|
函数fgets()
从给出的文件流中读取[num - 1]
个字符并且把它们转储到str
(字符串)中. fgets()
在到达行末时停止,在这种情况下,str
(字符串)将会被一个新行符结束. 如果fgets()
达到[num - 1]
个字符或者遇到EOF
, str
(字符串)将会以null
结束.fgets()
成功时返回str
(字符串),失败时返回NULL
.
fopen
语法:
1 |
|
fopen()
函数打开由fname
(文件名)指定的文件, 并返回一个关联该文件的流.如果发生错误, fopen()
返回NULL
. mode
(方式)是用于决定文件的用途(例如 用于输入,输出,等等)
Mode(方式) | 意义 |
---|---|
“r” | 打开一个用于读取的文本文件 |
“w” | 创建一个用于写入的文本文件 |
“a” | 附加到一个文本文件 |
“rb” | 打开一个用于读取的二进制文件 |
“wb” | 创建一个用于写入的二进制文件 |
“ab” | 附加到一个二进制文件 |
“r+” | 打开一个用于读/写的文本文件 |
“w+” | 创建一个用于读/写的文本文件 |
“a+” | 打开一个用于读/写的文本文件 |
“rb+” | 打开一个用于读/写的二进制文件 |
“wb+” | 创建一个用于读/写的二进制文件 |
“ab+” | 打开一个用于读/写的二进制文件 |
示例:
1 | char ch; |
fprintf
语法:
1 |
|
fprintf()
函数根据指定的format
(格式)(格式)发送信息(参数)到由stream
(流)指定的文件. fprintf()
只能和printf()
一样工作. fprintf()
的返回值是输出的字符数,发生错误时返回一个负值.
示例:
1 | char name[20] = "Mary"; |
fputc
语法:
1 |
|
函数fputc()
把给出的字符ch
写到给出的输出流. 返回值是字符, 发生错误时返回值是EOF
.
fputs
语法:
1 |
|
fputs()
函数把str
(字符串)指向的字符写到给出的输出流. 成功时返回非负值, 失败时返回EOF
.
fread
语法:
1 |
|
函数fread()
读取[num]
个对象(每个对象大小为size
(大小)指定的字节数),并把它们替换到由buffer
(缓冲区)指定的数组. 数据来自给出的输入流. 函数的返回值是读取的内容数量…
使用feof()
或ferror()
判断到底发生哪个错误.
freopen
语法:
1 |
|
freopen()
函数常用于再分配一个以存在的流给一个不同的文件和方式(mode
).在调用本函数后,给出的文件流将会用mode
(方式)指定的访问模式引用fname
(文件名). freopen()
的返回值是新的文件流,发生错误时返回NULL
.
fscanf
语法:
1 |
|
函数fscanf()
以scanf()
的执行方式从给出的文件流中读取数据. fscanf()
的返回值是事实上已赋值的变量的数,如果未进行任何分配时返回EOF
.
fseek
语法:
1 |
|
函数fseek()
为给出的流设置位置数据. origin
的值应该是下列值其中之一(在stdio.h
中定义):
名称 | 说明 |
---|---|
SEEK_SET | 从文件的开始处开始搜索 |
SEEK_CUR | 从当前位置开始搜索 |
SEEK_END | 从文件的结束处开始搜索 |
fseek()
成功时返回0,失败时返回非零. 你可以使用fseek()
移动超过一个文件,但是不能在开始处之前. 使用fseek()
清除关联到流的EOF
标记.
fsetpos
语法:
1 |
|
fsetpos()
函数把给出的流的位置指针移到由position
对象指定的位置. fpos_t
是在stdio.h
中定义的. fsetpos()
执行成功返回0,失败时返回非零.
ftell
语法:
1 |
|
ftell()
函数返回stream
(流)当前的文件位置,如果发生错误返回-1.
fwrite
语法:
1 |
|
fwrite()
函数从数组buffer
(缓冲区)中, 写count
个大小为size
(大小)的对象到stream
(流)指定的流. 返回值是已写的对象的数量.
getc
语法:
1 |
|
getc()
函数从stream
(流)获取并返回下一个字符,如果到达文件尾返回EOF
. getc()
和fgetc()
是一样的. 例如:
1 | char ch; |
getchar
语法:
1 |
|
getchar()
函数从STDIN
(标准输入)获取并返回下一个字符,如果到达文件尾返回EOF
.
gets
语法:
1 |
|
gets()
函数从STDIN
(标准输入)读取字符并把它们加载到str
(字符串)里,直到遇到新行(\n
)或到达EOF
. 新行字符翻译为一个null
中断符. gets()
的返回值是读入的字符串,如果错误返回NULL
.
perror
语法:
1 |
|
perror()
函数打印str
(字符串)和一个相应的执行定义的错误消息到全局变量errno
中.
printf
语法:
1 |
|
printf()
函数根据format
(格式)给出的格式打印输出到STDOUT
(标准输出)和其它参数中.
字符串format
(格式)由两类项目组成 - 显示到屏幕上的字符和定义printf()
显示的其它参数. 基本上, 你可以指定一个包含文本在内的format
(格式)字符串,也可以是映射到printf()
其它参数的”特殊”字符. 例如本代码
1 | char name[20] = "Bob"; |
显示下列输出:
1 | Hello Bob, you are 21 years old |
%s
表示, “在这里插入首个参数,一个字符串.” %d
表示第二个参数(一个整数)应该放置在那里. 不同的”%-codes
“表示不同的变量类型, 也可以限制变量的长度.
Code | 格式 |
---|---|
%c | 字符 |
%d | 带符号整数 |
%i | 带符号整数 |
%e | 科学计数法, 使用小写”e” |
%E | 科学计数法, 使用大写”E” |
%f | 浮点数 |
%g | 使用%e或%f中较短的一个 |
%G | 使用%E或%f中较短的一个 |
%o | 八进制 |
%s | 一串字符 |
%u | 无符号整数 |
%x | 无符号十六进制数, 用小写字母 |
%X | 无符号十六进制数, 用大写字母 |
%p | 一个指针 |
%n | 参数应该是一个指向一个整数的指针指向的是字符数放置的位置 |
%% | 一个’%’符号 |
一个位于一个%和格式化命令间的整数担当着一个最小字段宽度说明符,并且加上足够多的空格或0使输出足够长. 如果你想填充0,在最小字段宽度说明符前放置0. 你可以使用一个精度修饰符,它可以根据使用的格式代码而有不同的含义.
用%e
, %E
和 %f
,精度修饰符让你指定想要的小数位数. 例如,
1 | %12.6f |
将会至少显示12位数字,并带有6位小数的浮点数.
用%g
和 %G,
精度修饰符决定显示的有效数的位数最大值.
用%s
,精度修饰符简单的表示一个最大的最大长度, 以补充句点前的最小字段长度.
所有的printf()
的输出都是右对齐的,除非你在%符号后放置了负号. 例如,
1 | %-12.4f |
将会显示12位字符,4位小数位的浮点数并且左对齐. 你可以修改带字母l
和h
,%d
, %i
, %o
, %u
和 %x
等类型说明符指定长型和短型数据类型 (例如 %hd
表示一个短整数). %e
, %f
和 %g
类型说明符,可以在它们前面放置l
指出跟随的是一个double
. %g
, %f
和 %e
类型说明符可以置于字符’#
‘前保证出现小数点, 即使没有小数位. 带%x
类型说明符的’#
‘字符的使用, 表示显示十六进制数时应该带’0x
‘前缀. 带%o
类型说明符的’#
‘字符的使用, 表示显示八进制数时应该带一个’0
‘前缀.
你可以在输出字符串中包含 连续的Escape序列.
printf()
的返回值是打印的字符数,如果发生错误则返回一个负值.
putc
语法:
1 |
|
显示”temp.cpp
“的内容到屏幕.
putchar
语法:
1 |
|
putchar()
函数把ch
写到STDOUT
(标准输出). 代码
1 | putchar( ch ); |
和
1 | putc( ch, STDOUT ); |
一样.
putchar()
的返回值是被写的字符, 发生错误时返回EOF
.
puts
语法:
1 |
|
函数puts()
把str
(字符串)写到STDOUT
(标准输出)上. puts()
成功时返回非负值, 失败时返回EOF
.
remove
语法:
1 |
|
函数rename()
更改文件oldfname
的名称为newfname
. rename()
成功时返回0,错误时返回非零.
rewind
语法:
1 |
|
函数rewind()
把文件指针移到由stream
(流)指定的开始处, 同时清除和流相关的错误和EOF
标记.
scanf
语法:
1 |
|
scanf()
函数根据由format
(格式)指定的格式从stdin
(标准输入)读取,并保存数据到其它参数. 它和printf()
有点类似. format
(格式)字符串由控制字符,空白字符和非空白字符组成. 控制字符以一个%
符号开始,如下:
控制字符 | 说明 |
---|---|
%c | 一个单一的字符 |
%d | 一个十进制整数 |
%i | 一个整数 |
%e, %f, %g | 一个浮点数 |
%o | 一个八进制数 |
%s | 一个字符串 |
%x | 一个十六进制数 |
%p | 一个指针 |
%n | 一个等于读取字符数量的整数 |
%u | 一个无符号整数 |
%[] | 一个字符集 |
%% | 一个精度符号 |
scanf()
读取匹配format
(格式)字符串的输入. 当读取到一个控制字符, 它把值放置到下一个变量. 空白(tabs, 空格等等)会跳过. 非空白字符和输入匹配, 然后丢弃. 如果是一个在%符号和控制符间的数量, 那么只有指定数量的字符转换到变量中. 如果scanf()
遇到一个字符集(用%[]
控制字符表示), 那么在括号中的任意字符都会读取到变量中. scanf()
的返回值是成功赋值的变量数量, 发生错误时返回EOF
.
setbuf
语法:
1 |
|
setbuf()
函数设置stream
(流)使用buffer
(缓冲区),如果buffer
(缓冲区)是null
,关闭缓冲. 如果使用非标准缓冲尺寸, 它应该由BUFSIZ
字符决定长度.
setvbuf
语法:
1 |
|
函数setvbuf()
设置用于stream
(流)的缓冲区到buffer
(缓冲区),其大小为size
(大小). mode
(方式)可以是:
_IOFBF
, 表示完全缓冲_IOLBF
, 表示线缓冲_IONBF
, 表示无缓存
sprintf
语法:
1 |
|
sprintf()
函数和printf()
类似, 只是把输出发送到buffer
(缓冲区)中.返回值是写入的字符数量. 例如:
1 | char string[50]; |
sscanf
语法:
1 |
|
函数sscanf()
和scanf()
类似, 只是输入从buffer
(缓冲区)中读取.
tmpfile
语法:
1 |
|
函数tempfile()
用一个独特的文件名打开一个临时文件,并返回一个到该文件的指针.如果发生错误则返回null
.
tmpnam
语法:
1 |
|
tmpnam()
函数创建一个独特的文件名并保存在name
中. tmpnam()
最多可以调用TMP_MAX
指定的次数.
ungetc
语法:
1 |
|
函数ungetc()
把字符ch
放回到stream
(流)中.
vprintf, vfprintf和 vsprintf
语法:
1 |
|
这些函数和printf()
非常相似, fprintf()
和 sprintf()
的不同在于参数列表是一个指向一系列参数的指针. va_list
在STDARG.H
中定义,并且也可以被va_arg()
使用. 例如:
1 | void error( char *fmt, ... ) { |