一.输入输出流
- 键盘输入数据到程序——标准输入input(cin);
- 程序数据输出到显示器——标准输出output(cout);
- 标准输入+标准输出=标准I/O
- 文件的输入和输出——文件I/O。
cout;//标准输出—输出数据到显示器
cin;//标准输入—输出数据到显示器
cerr;//标准错误—输出数据到显示器
clog;//标准日志—输出数据到显示器
cerr和clog区别:cerr没有缓冲区,clog有缓冲区。
二.缓冲区
三.标准输入流
标准输入流cin,重点掌握函数,如下:
cin.get();//一次只能读取一个字符
cin.get(一个参数);//读取一个字符
cin.get(两个参数);//可以读字符串
cin.getline();//读取一行数据
cin.ignore(n);//忽略n个字符
cin.peek();//查看缓存中第一个字符
cin.putback();//给缓存中放数据
get()和peek()区别:
get()取出缓存区中的数据;
peek()查看缓存区的第一个字符,不会取走;
1.测试:cin.get()
将数据从缓冲区拿走。
如果缓冲区没有数据,会发生阻塞,等待用户输入数据,然后再从缓冲区拿走。
void test01() {
char ch;
//cin.get()会从缓冲区拿取数据
//EOF是键盘输入结束标志,Ctrl+Z结束
while ((ch=cin.get())!=EOF)
{
cout << ch << endl;
}
}
结果:
2.测试:cin.get(一个参数)
char ch1;
cin.get(ch1);//读取一个字符
cout << ch1;
结果:
3.测试:cin.get(两个参数)
从缓冲区读取一个字符串
char buf[256] = { 0 };
cin.get(buf, 256);//从缓冲区读取一个字符串
4.测试:cin.getline()
读取一行数据
char buf[256] = { 0 };
cin.getline(buf, 256);//读取一行数据
5.测试:cin.ignore()
- cin.ignore() 忽略一个字符;
- cin.ignore(n) 忽略n个字符;
- cin.ignore(n,‘\n’) 忽略n个字符,但遇到回车结束;
char ch;
cin.get(ch);
cout << "输出ch=" << ch << endl;
cin.ignore();//忽略一个字符
cin.get(ch);
cout << "输出ch=" << ch << endl;
结果:
修改:
cin.ignore(2);//忽略两个字符
6.测试cin.peek()
偷窥一下缓冲区,返回第一个字符,不是取走!!!字符还在缓冲区。
案例1:
char ch;
ch = cin.peek();//偷窥一下缓冲区,返回第一个字符
cout << ch << endl;
结果:
案例2:(好好看!!!)
void test04() {
char ch;
ch = cin.peek();//偷窥一下缓冲区,返回第一个字符
if (ch >= '0' && ch <= '9') {
int number;
cin >> number;//cin将缓冲区数据给number
cout << "你输入的是数字:" << number << endl;
}
else {
char buf[1024] = { 0 };
cin >> buf;
cout << "你输入的是字符串:" << buf << endl;
}
}
结果:
6.测试:cin.putback()
与cin.get()对应,将从缓冲区拿走的数据,再放回缓冲区。
char ch;
cin.get(ch);//从缓冲区取走一个字符
cout << "缓冲区第一位是:" << (char)cin.peek() << endl;
if (ch >= '0' && ch <= '9') {
cin.putback(ch);
int number;
cin >> number;
cout << "输入的是数字:"<<number << endl;
}else {
cin.putback(ch);
char buf[1024] = {0};
cin >> buf;
cout << "输入的字符串是:" << buf << endl;
}
结果: