![C++从零开始学(视频教学版)(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/128/29977128/b_29977128.jpg)
2.3 输入输出对象
C++的输出和输入是用“流”(stream)的方式来实现的,所谓的“流”是从数据的传输抽象而来的,可以将其理解为文件。图2-4表示C++通过流进行输入输出的过程。
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P37_4387.jpg?sign=1739335888-B2biJxKVtamAP8sMS6aakibVs0HTr7xW-0-769272c2f2aeb06be2681dbf3014ad7e)
图2-4 C++通过流进行输入输出的过程
有关流对象cin、cout和流运算符的定义等信息是预先定义好的流对象,存放在C++的输入输出流库中,因此如果在程序中使用cin、cout和流运算符,就必须使用预处理命令把头文件stream包含到本文件中:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P37_4395.jpg?sign=1739335888-BGWLyXEOEfbyYuAMAA8Sdr9dWSPrA08M-0-6e9faeebf6175da76fa6726d8940860a)
2.3.1 cout输出数据
cout语句的一般格式为:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P37_4404.jpg?sign=1739335888-V8GTe6sTSQl1kT2PKLGNGZBNk4NqJcW7-0-2ecd5b4b8dde24cda1a5f8911261db96)
在定义流对象时,系统会在内存中开辟一段缓冲区,用来暂存输入输出流的数据。在执行cout语句时,先把插入的数据顺序存放在输出缓冲区中,直到输出缓冲区满或遇到cout语句中的endl(或'\n'、ends、flush)为止,此时将缓冲区中已有的数据一起输出,并清空缓冲区。输出流中的数据在系统默认的设备(一般为显示器)输出。
cout可以输出整数、实数、字符以及字符串,cout中插入符“<<”后面可以跟变量、常量、转义字符、对象等表达式。
一个cout语句可以分成若干行。
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P37_4412.jpg?sign=1739335888-vT50sWPqAs0zZJpbG0ZtHYdbO5Sdu7Ck-0-abb66185b18c04270cc771c8a5a3880e)
可以写成:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P37_4430.jpg?sign=1739335888-T0ggVSEbb7HiqPfKtjuvg9JAheywOOiy-0-73014c38947cda60529f512c518264b5)
也可写成多个cout语句:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P38_54440.jpg?sign=1739335888-Ec9D3OlDKCcT01SdKTLCEmrHbVmAhq2N-0-1f751c37a022b5aa3426b4f8e1610cb9)
以上3种情况的输出均为:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P38_54441.jpg?sign=1739335888-gOTfJYXLrI4hrRlsfmPhAajtLkCKbzHZ-0-3cb69f7b9f8aa4c26928dd6e24bf0351)
下面通过一个具体例子来展示cout输出的用法。
【实例2-4】cout的用法(代码2-4.txt)
新建名为“couttest”的【C++ Source File】源程序,源代码如下所示:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P38_54442.jpg?sign=1739335888-m66Jdj53dsmEr3jcIStZhfD6ZZiHtoTc-0-27cb378ecf207c57dd25f2efaed1376d)
【代码详解】
在该例中,在主程序中使用了一个for循环,将从6到1的int型变量全部输出一遍。
运行结果如图2-5所示。
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P38_4551.jpg?sign=1739335888-P4DnAR0lZyyYJGmKT7U0D4Hs4XaiK8PV-0-d23adfd6cc4e7ac21462a3cd3bf844bd)
图2-5 代码运行结果
【实例分析】
从整个示例来看,分别调用cout将6~1输出到屏幕上。
前面介绍了cout的默认格式,但是在实际应用中,输入输出有一些特殊的要求,如在输出实数时规定字段宽度、只保留两位小数、数据向左或向右对齐等。
如果使用了控制符,在程序单位的开头除了要加iostream头文件外,还要加iomanip头文件。
下面通过一个具体的例子来说明如何使用控制符。
【实例2-5】cout控制符(代码2-5.txt)
新建名为“couttest”的【C++ Source File】源程序,源代码如下所示:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P39_4720.jpg?sign=1739335888-0oZk7mbuhsPPcrJMDHRR2sA3HCyQkWmm-0-c779e4d8f49bf9fc581889d21c5cf57b)
【代码详解】
在本例中,首先定义了一个double型变量a,再调用cout各种标识符,按照需要将double型变量a输出。接下来,定义了int型变量b,再调用cout各种类型标识符将int型变量b输出。
运行结果如图2-6所示。
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P39_4717.jpg?sign=1739335888-V7ZsngnZ4Ng1CK0RFH7xFUgXa4tRrFLR-0-5f1a84a5f5cc48701fac095a9114afa4)
图2-6 代码运行结果
【实例分析】
从运行结果来看,利用cout标识符的控制符实现了各类数据的输出。
2.3.2 cin读取输入数据
cin可以从键盘获得多个输入值,语句的一般格式为:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P40_4891.jpg?sign=1739335888-x7Geg4PuRtz6iNPHjSYraxz3hgd3OeA3-0-8f2381fa1506433ac096c84b6908cc0c)
与cout类似,一个cin语句可以分成若干行。
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P40_123.jpg?sign=1739335888-5SQmuhIMalL9085QkSigyHesaGb7wUp7-0-2181275cfa51e83657bb294a6d2ccb7f)
可以写成:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P40_4893.jpg?sign=1739335888-OQUi23xSFmY22jEOM9bQgLqOmRBVF4Uf-0-20cb234225a24d94fd26bca78f646a36)
也可以写成:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P40_4894.jpg?sign=1739335888-KAj5hYGt9FuGjuHZEwdWaME2MpQsKApS-0-3a1092809fc82e992ae341f427730f1d)
以上3种情况均可以从键盘输入:1234↙。
也可以分多行输入数据:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P40_4895.jpg?sign=1739335888-rPeLL1hbHG6vrynFeOG3FHiYDjrCDYpc-0-1d54640ba5f7d6320af1aabc7b0eb6e2)
在用cin输入时,系统会根据变量的类型从输入流中折取相应长度的字节。
下面通过一个例子来说明如何使用cin来输入。
【实例2-6】cin的用法(代码2-6.txt)
新建名为“cintest”的【C++ Source File】源程序,源代码如下所示:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P40_4896.jpg?sign=1739335888-Cm308Es37SY0fg2rTvOxo0biQeuswDD4-0-1699d9ce1f57f93f0fbbdd13c05cde9d)
【代码详解】
在该例中,首先定义了一个char类型的字符串name,又定义了一个int类型的变量age。再使用cin从键盘输入name和age,最后将赋值的变量输出。
运行结果如图2-7所示。
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P41_4916.jpg?sign=1739335888-iEKI3QQR0JH7sm8PJPLugzm7YEmEXxzX-0-ec823acb39d4e80ae62b6b994971f5f8)
图2-7 代码运行结果
【实例分析】
从运行结果来看,利用cin实现了name和age的输入。
提示
在默认方式下,标准输入设备是键盘,标准输出设备是显示器,而不论何种情况,标准输出设备总是显示器。