C++与C语言的区别——C++是对C语言的扩展(二)——输入cin与输出cout

来源:互联网 发布:共享 网络打印机 运行 编辑:程序博客网 时间:2024/05/29 04:26

        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 键都不能结束流输入。