标准输入:键盘输入,程序读取 cin全局流对象
标准输出:程序读取,显示器输出 cout全局流对象
标注错误输出:cerr 没缓冲区
标注日志输出:clog 有缓冲区
把这个过程叫做流
输入输出之间都有一个缓冲区,数据是先存储在缓冲区当中的,读取数据是从缓冲区里面读取的。输出缓冲区对程序的读写要有个cout,不仅是换行,还是刷新输出缓冲区。在windows下面看不见,在linux下面可以看出差别
cin.get 从缓冲区拿数据,但是缓冲区堵塞,输入数据,就到缓冲区,然后就得到单个字符
标准输入流重点函数
//接收单个字符
void test01()
{
char ch;
cin.get(ch); //ch=cin.get();
cout << ch <<endl;
}
//接收字符串
void test02()
{
char ch[20];
cin.get(ch, 20);
cout << ch << endl;
}
//接收一个字符串
void test03()
{
char ch[20];
//实际有三个参数,接受字符串为ch,个数20,结束字符(省略时默认为'\0')
cin.getline(ch, 20);
cout << ch << endl;
}
//忽略字符
void test04()
{
char ch;
cin.get(ch);
cout << ch << endl;
//如果括号内不加参数,则省略单个字符
//如果括号内加一个参数,忽略括号内的参数个数
//如果括号内加两个参数,忽略括号内第一个参数的长度,
//若在这个长度内找到第二个参数,则停止忽略,显示第二个参数后面的字符
cin.ignore(10,'8');
cin.get(ch);
cout << ch << endl;
}
//看缓冲区里面的字符,而不取走
void test05()
{
char ch;
//观看缓冲区,返回第一个字符
ch=cin.peek();
if (ch >= '0'&&ch <= '9')
{
int number;
cin >> number;
cout << "输入的为是数字:" <<number<< endl;
}
else
{
char buf[256] = { 0 };
cin >> buf;
cout << "输入的不是位数字:" << buf << endl;
}
}
//将缓冲区取出的字符放回缓冲区
void test06()
{
char ch;
cin.get(ch);
if (ch >= '0'&&ch <= '9')
{
//将从缓冲区取出的字符,重新放回
cin.putback(ch);
int number;
cin >> number;
cout << "输入的是" << number << endl;
}
}
标准输出流重点函数
void test02()
{
//通过成员方式
int number = 10;
//卸载掉当前默认的10进制输出
cout.unsetf(ios::dec);
//八进制输出
cout.setf(ios::oct);
cout << number << endl;
//显示所有
cout.setf(ios::showbase);
cout << number << endl;
//设置位宽
cout.width(10);
//设置填充
cout.fill('*');
//设置左对齐
cout.setf(ios::left);
cout << number << endl;
//通过控制符引入头文件<iomanip>
int number2 = 10;
cout << hex << setiosflags(ios::showbase)
<< setw(10) <<setiosflags(ios::left)
<< setfill('~') << number2 << endl;
}