
前面的文章中我们已经对getchar与putchar和scanf与printf函数有所了解,我们还剩下cin与cout没讲,于是这一篇将对cin与cout详细的讲解。
前面我们已经在C++入门中提到了:cin和cout两个流对象。接下来让我们进一步了解一下吧。
cin是C++中提供的标准输入流对象,一般针对的是键盘,也就是从键盘上输入的字符流,使用cin来进行数据的提取,cin一般是和>>(流提取运算符)配合使用的。cin的功能和scanf是类似的。
cout是C++中提供的标准输出流对象,一般针对的控制台的窗口,也就是将数据以字符流的形式输出到控制台窗口上显示。cout一般是和<<(流插入运算符)配合使用。cout的功能和printf是类似的。
写程序的时候,经常需要处理数据,不管什么类型的数据都是以字符流的形式输入和输出的,也就是不管在键盘上输入什么类型的数据,还是将程序中的各种类型的数据输出显示到控制台屏幕上,都是以字符流的形式处理的。
cin和cout 的输入输出非常的方便,不需要手动控制格式,能够自动识别变量类型。
演示代码:
#include <iostream>
using namespace std;
int main()
{
int a;
char c;
float f;
cin >> a; // 读取一个整数
cin >> c; // 读取一个字符
cin >> f; // 读取取一个浮点数
cout << "打印结果:"<<endl;
cout << a << endl;
cout << c << endl;
cout << f << endl;
return 0;
}
当我们在键盘输入数据的时候,输入的数据不能被cin解读为对应类型的数据,那么读取也就结束了。
比如:

cin使用细节: cin在读取的时候是根据用戶的输入,从前往后,从上往下依次扫描。 cin在读取的过程中遇到空格,自动会跳过,所以不要担心在想要的字符前输入空白字符。 当一行读取结束的时候,会自动换行,读取下一行的内容。 cin后面不可以跟换行endl。
如果我们一次要输入/输出多个数据,那cin和cout能做到吗?可以!
在上面的代码中,使用cout进行变量的输出,实质上是将变量插入到cout对象里,并以cout对象作为返回值返回,因此我们还可以用<< 在后面连续输出多个内容,通过连续输入输出的方式对代码进行编写,效果如下:
cin举例:
#include <iostream>
using namespace std;
int main()
{
int a = 0;
int b = 0;
//同类型变量连续输入
cin >> a >> b; //以最后一次
输入为准
//添加换行endl
cin >> a >> endl; //代码编译报错
return 0;
}#include <iostream>
using namespace std;
int main()
{
//不同类型变量的连续输入
int a = 0;
char ch = 0;
float f = 0;
cin >> a >> ch >> f;
return 0;
}cout举例:
#include <iostream>
using namespace std;
int main()
{
//对同一类型变量连续输出
int a = 10;
int b = 20
cout << a << " " << b <<
endl;
return 0;
}#include <iostream>
using namespace std;
int main()
{
//支持相同/不同类型变量的连续输入
char ch = 0;
float f = 0.1;
cout << ch << f << endl;
//格式化输出:添加(任意)空格和字符串
cout << "ch:" << ch << " f:" << f << endl;
//格式化输出:多次换行
cout << ch << endl << endl;
return 0;
} cin的好处: 当输入若干个变量(也就是数据量很少)的时候,我们就可以通过>>把所有的数据用一行代码完成接收,而且无需关心数据的类型,和scanf函数比起来代码的书写非常简洁明了。
cout的好处: cout也可以用来连续输出多个数值,而且无需考虑数值的类型,因为它本身会做类型处理,和printf比起来比较方便。
这一部分使用起来比较麻烦,可以选择性学习。
printf函数在输出数据的时候,可以指定格式来输出,比如:指定宽度,比如指定小数点后的位数,对齐方式等等。那么cout在数据的时候能否指定格式呢?答案是可以的!cout 结合< iomanip > (IO manipulators)头文件中的操纵符,可以灵活控制输出格式,从而满足各种格式化需求。
#include <iostream>
using namespace std;
#include <iomanip>
int main() {
int a = 123;
cout << "默认宽度: " << a << endl;
cout << "宽度设置为10: " << setw(10) << a << endl;
cout << "宽度为10,不够时填充*: " << setw(10) << setfill('*') << a << endl;
return 0;
}结果演示:

代码如下:
#include <iostream>
using namespace std;
#include <iomanip>
int main()
{
double pi = 3.141592653589793;
cout << "默认: " << pi << endl;
cout << "固定小时点方式: " << fixed << pi << endl;
cout << "科学计数法方式: " << scientific << pi << endl;
cout << "固定小数点,小数点后2位有效数字: " << setprecision(2) << pi << endl;
cout << "固定小数点,小数点后2位有效数字: " << fixed << setprecision(2) << pi << endl;
return 0;
}演示效果:


如果改一下数据就可以看到其中的不同:
#include <iostream>
using namespace std;
#include <iomanip>
int main()
{
double pi = 31.41592653589793;
cout << "默认: " << pi << endl;
cout << "固定小时点方式: " << fixed << pi << endl;
cout << "科学计数法方式: " << scientific << pi << endl;
cout << "固定小数点,小数点后2位有效数字: " << setprecision(2) << pi << endl;
cout << "固定小数点,小数点后2位有效数字: " << fixed << setprecision(2) << pi << endl;
return 0;
}演示效果:

cout结合其他操作符还能完成一些其他的格式输出,但是毕竟cout在完成格式化输出的时候,其实不如printf方便,所以在竞赛中,涉及格式化输出的时候,我们一般会使用printf来完成,所以这一部分的内容属于选学部分。
代码如下:
#include <iostream>
using namespace std;
#include <iomanip>
int main() {
int n = 255;
cout << "十进制 : " << dec << n << endl;
cout << "十六进制: " << hex << n << endl;
cout << "八进制 : " << oct << n << endl;
return 0;
}
代码如下:
#include <iostream>
using namespace std;
#include <iomanip>
int main() {
int n = 123;
cout << "右对齐: " << setw(10) << n << endl;
cout << "右对齐: " << setw(10) << right << n << endl;
cout << "左对齐: " << setw(10) << left << n << endl;
return 0;
}演示结果:

希望这边文章能让各位更好的了解cin与cout函数,下一篇我们将深入探讨循环的世界。
同时愿诸君能一起共渡重重浪,终见缛彩遥分地,繁光远缀天。