C++
语言
标准库头文件
自立与有宿主实现
具名要求
语言支持库
概念库 (C++20)
诊断库
工具库
字符串库
容器库
迭代器库
范围库 (C++20)
算法库
数值库
本地化库
输入/输出库
文件系统库 (C++17)
正则表达式库 (C++11)
原子操作库 (C++11)
线程支持库 (C++11)
技术规范
输入/输出库
I/O 操纵符
C 风格 I/O
缓冲
basic_streambuf
basic_filebuf
basic_stringbuf
strstreambuf(C++98 中弃用)
basic_syncbuf(C++20)
流
抽象
ios_base
basic_ios
basic_istream
basic_ostream
basic_iostream
文件 I/O
basic_ifstream
basic_ofstream
basic_fstream
字符串 I/O
basic_istringstream
basic_ostringstream
basic_stringstream
数组 I/O
istrstream(C++98 中弃用)
ostrstream(C++98 中弃用)
strstream(C++98 中弃用)
同步的输出
basic_osyncstream(C++20)
类型
streamoff
streamsize
fpos
错误类别接口
iostream_category(C++11)
io_errc(C++11)
C 风格 I/O
类型与对象
FILE
fpos_t
stdinstdoutstderr
函数
文件访问
fopen
freopen
fclose
fflush
fwide
setbuf
setvbuf
直接输入/输出
fread
fwrite
无格式输入/输出
fgetc
fgets
fputc
fputs
getchar
gets(C++14 前)
putchar
puts
ungetc
fgetwc
fgetws
fputwc
fputws
getwchar
putwchar
ungetwc
有格式输入
scanffscanfsscanf
vscanfvfscanfvsscanf(C++11)(C++11)(C++11)
wscanffwscanfswscanf
vwscanfvfwscanfvswscanf(C++11)(C++11)(C++11)
有格式输出
printffprintfsprintfsnprintf(C++11)
vprintfvfprintfvsprintfvsnprintf(C++11)
wprintffwprintfswprintf
vwprintfvfwprintfvswprintf
文件定位
ftell
fgetpos
fseek
fsetpos
rewind
错误处理
clearerr
feof
ferror
perror
文件上的操作
remove
rename
tmpfile
tmpnam
定义于头文件
#define stdin /* implementation-defined */
(1)
#define stdout /* implementation-defined */
(2)
#define stderr /* implementation-defined */
(3)
预定义三个文本流。这些流在程序启动时隐式打开,且为无面向。
1) 与标准输入流关联,用于读取约定的输入。程序启动时,该流为完全缓冲当且仅当能确定流不引用交互式设备。
2) 与标准输出流关联,用于写入约定的输出。程序启动时,该流为完全缓冲当且仅当能确定流不引用交互式设备。
3) 与标准错误流关联,用于写入诊断输出。程序启动时,该流不为完全缓冲。
何者组成交互式设备是实现定义的。
这些宏展开成 std::FILE* 类型表达式。
注解
尽管 POSIX 不强制, UNIX 约定是 stdin 与 stdout 若与终端关联则为行缓冲,而 stderr 为无缓冲。
这些宏可能展开成可修改左值。若修改任何这些 std::FILE* 左值,则对应的流上的后续操作导致未指明或未定义行为。
示例
此示例展示等价于 std::printf 的函数。
运行此代码
#include
#include
int my_printf(const char * fmt, ...)
{
std::va_list vl;
va_start(vl, fmt);
int ret = std::vfprintf(stdout, fmt, vl);
va_end(vl);
return ret;
}
int main()
{
my_printf("Rounding:\t%f %.0f %.32f\n", 1.5, 1.5, 1.3);
my_printf("Padding:\t%05.2f %.2f %5.2f\n", 1.5, 1.5, 1.5);
my_printf("Scientific:\t%E %e\n", 1.5, 1.5);
my_printf("Hexadecimal:\t%a %A\n", 1.5, 1.5);
}
可能的输出:
Rounding: 1.500000 2 1.30000000000000004440892098500626
Padding: 01.50 1.50 1.50
Scientific: 1.500000E+00 1.500000e+00
Hexadecimal: 0x1.8p+0 0X1.8P+0
参阅
cinwcin
从标准 C 输入流 stdin 中读取(全局对象)
coutwcout
写入到标准 C 输出流 stdout(全局对象)
cerrwcerr
写入到标准 C 错误流 stderr, 无缓冲(全局对象)
clogwclog
写入到标准 C 错误流 stderr(全局对象)