C++中使用cin和cout 完成输入输出操作。与scanf和printf 不同,scanf 和printf 是函数,而cin 和cout 是类对象。,属于流操作符。什么是流呢?术语“流”想要表达的意思是:随着时间的推移,字符是顺序生成或者消耗的。咱们看一下是如何“流”的.
1) 流输入只决定了先后顺序
比如说下面这段代码
int a,b;
cin >> a >>b;
实际上等价于cin >>a, cin >>b,你千万不要以为此时a =b了。
2)可以输入输出不同类型的变量
int a;char b;
cin >>a>>b;
在C++中这样输入是完全可以的,不受空格、回车或者Tab键的影响。但是在C语言中,输入就比较麻烦。
3)格式化输出
C语言中,Printf() 函数拥有强大的格式控制输出。C++也可以实现。说明一个小知识点,由于计算机没有FPU,对于浮点型的数据,小数位都是不准确的。
cout 默认输出6位有效数字。但是流算子setw()可以设置域宽,但是要包含头文件 #include <iomanip>。比如下面这段代码。
int main()
{
int a = 12345;
cout << "xxxxxxxxxxxx" << endl;
cout << setw(8) << a << endl;
}
输出结果为:
是不是就输出了8位啊~
如果要设置左对齐呢,也很方便,比如下面:(右对齐是 right)
int main()
{
int a = 12345;
cout << "xxxxxxxxxxxx" << endl;
cout << setiosflags(ios::left )<<setw(8) << a << endl;
}
得到结果:
如果我们想设置小数点位数呢?将setprecision(n)<<setiosflag(ios::fiexed)组合起来使用即可
int main()
{
float a = 1.28273959705267;
cout << setprecision(3) << setiosflags(ios::fixed) << a << endl;//setprecision(3)设置小数点位数,需要四舍五入
cout << setprecision(4) << setiosflags(ios::fixed) << a << endl;
}
得到结果:
如果想按照进制输出呢?代码如下
int main()
{
int a = 100;
cout << dec << a << endl;//默认是十进制
cout << oct << a << endl;//八进制
cout << hex << a << endl;//十六进制
cout << setbase(16) << a << endl;//十六进制
}
结果如下:
如果想设置填充符呢,代码如下:
int main()
{
int a = 1234;
cout << "xxxxxxxxxxxxxx" << endl;
cout << setw(10) << a << endl;
cout << setfill('x') << setw(10) << a << endl;
cout << setfill('x') <<setiosflags(ios ::left) << setw(10) << a << endl;//左对齐以后,在右面填充 x
}
结果如下:
4) 读取数量不定的输入数据
当我们使用一个istream对象作为条件时,其效果是检测流的状态。如果遇到文件结束符(按下 Ctrl +Z,松开手,然后按回车)或者遇到一个无效输入时,istream对象状态变为无效。比如说读取 n 和数,计算前 n 个数据之和。代码如下:
int main()
{
int sum = 0, value = 0;
while (cin >> value)
{
sum += value;
}
cout << "sum = " << sum << endl;
return 0;
}
注意,空格和 enter 键都不能结束流输入。