好奇的探索者,理性的思考者,踏实的行动者。
Table of Contents:
C++ 通常使用 cout 输出数据,和 printf() 函数相比,cout 实现格式化输出数据的方式更加多样化。
一方面,cout 作为 ostream 类的对象,该类中提供有一些成员方法,可实现对输出数据的格式化;
另一方面,为了方面用户格式化输出数据,C++ 标准库专门提供了一个 <iomanip>
头文件,该头文件中包含有大量的格式控制符(严格意义上称为“流操纵算子”),使用更加方便。
cout 输出流在内存中有相应的缓冲区。但有时用户还有特殊的输出需求,例如只输出一个字符,这种情况下可以借助该类提供的 put() 成员方法实现。
cout.put(ch1).put(ch2).put(ch3); 或者 putchar()
在控制台中输入特殊的控制字符就表示输入结束了:
* 在 Windows 系统中,通过键盘输入时,按 Ctrl+Z 组合键后再按回车键,就代表输入结束。
* 在 UNIX/Linux/Mac OS 系统中,Ctrl+D 代表输入结束。
cin 判断文件读取结束
如果将标准输入重定向为某个文件,如在程序开始添加freopen("test.txt", "r", stdin);
语句,或者不添加上述语句,但是在 Windows 的“命令提示符”窗口中输入:
mycin < test.txt //假设编译生成的可执行文件的名字为 mycin.exe
cin 读到文件末尾时,cin >> n就会返回 false,从而导致程序结束。
get() 函数不会跳过空格、制表符、回车等特殊字符,所有的字符都能被读入。
#include <iostream>
using namespace std;
int main()
{
int c;
while ((c = cin.get()) != EOF)
cout.put(c);0;
return }
getline() 是 istream 类的成员函数,它有如下两个重载版本:
char* buf, int bufSize);
istream & getline(char* buf, int bufSize, char delim); istream & getline(
1, int delim = EOF); istream & ignore(int n =
此函数的作用是跳过输入流中的 n 个字符,或跳过 delim 及其之前的所有字符,哪个条件先满足就按哪个执行
在输入数据的格式不同,需要预先判断格式再决定如何输入时,peek() 就能起到作用。
istream 还有一个成员函数 istream & putback(char c)
,可以将一个字符插入输入流的最前面。
"hi!" << endl; //输出hi和一个换行,然后刷新缓冲区
cout << "hi!" << flush; //输出hi,然后刷新缓冲区,不附加任何额外字符
cout << "hi!" << ends; //输出hi和一个空字符,然后刷新缓冲区 cout <<
unitbuf 操作符
如果想在每次输出操作后都刷新缓冲区,我们可以使用 unitbuf 操作符,它告诉流在接下来的每次写操作之后都进行一次 flush 操作。
而 nounitbuf 操作符则重置流, 使其恢复使用正常的系统管理的缓冲区刷新机制
//所有输出操作后都会立即刷新缓冲区
cout << unitbuf; //任何输出都立即刷新,无缓冲
//回到正常的缓冲方式 cout << nounitbuf;