zoukankan      html  css  js  c++  java
  • C++输入cout与输出cin

    输入和输出并不是C++语言中的正式组成成分。C和C++本身都没有为输入和输出提供专门的语句结构。输入输出不是由C++本身定义的,而是在编译系统提供的I/O库中定义的。
    C++的输出和输入是用“流”(stream)的方式实现的。图3.2和图3.3表示C++通过流进行输入输出的过程。

    有关流对象cin、cout和流运算符的定义等信息是存放在C++的输入输出流库中的,因此如果在程序中使用cin、cout和流运算符,就必须使用预处理命令把头文件stream包含到本文件中:     #include <iostream> 尽管cin和cout不是C++本身提供的语句,但是在不致混淆的情况下,为了叙述方便,常常把由cin和流提取运算符“>>”实现输入的语句称为输入语句或cin语句,把由cout和流插入运算符“<<”实现输出的语句称为输出语句或cout语句。根据C++的语法,凡是能实现某种操作而且最后以分号结束的都是语句。

    输入流与输出流的基本操作

    cout语句的一般格式为:     cout<<表达式1<<表达式2<<……<<表达式n;
    cin语句的一般格式为:     cin>>变量1>>变量2>>……>>变量n;
    在定义流对象时,系统会在内存中开辟一段缓冲区,用来暂存输入输出流的数据。在执行cout语句时,先把插入的数据顺序存放在输出缓冲区中,直到输出缓冲区满或遇到cout语句中的endl(或' ',ends,flush)为止,此时将缓冲区中已有的数据一起输出,并清空缓冲区。输出流中的数据在系统默认的设备(一般为显示器)输出。
    一个cout语句可以分写成若干行。如     cout<<"This is a simple C++ program."<<endl;

    可以写成     cout<<"This is "  //注意行末尾无分号    

                          <<"a C++ "     <<"program."    

                          <<endl; //语句最后有分号

    也可写成多个cout语句,即     cout<<"This is "; //语句末尾有分号    

                                           cout <<"a C++ ";    

                                           cout <<"program.";    

                                           cout<<endl; 以上3种情况的输出均为 This is a simple C++ program.
    注意,不能用一个插入运算符“<<”插入多个输出项,如:     cout<<a,b,c; //错误,不能一次插入多项    

                                                                                  cout<<a+b+c; //正确,这是一个表达式,作为一项
    在用cout输出时,用户不必通知计算机按何种类型输出,系统会自动判别输出数据的类型,使输出的数据按相应的类型输出。

    如已定义a为int型,b为float型,c为char型,则     cout<<a<<' '<<b<<' '<<c<<endl;

    会以下面的形式输出:     4 345.789 a


    与cout类似,一个cin语句可以分写成若干行。

    如     cin>>a>>b>>c>>d;

    可以写成     cin>>a //注意行末尾无分号    

                        >>b //这样写可能看起来清晰些    

                        >>c  

                        >>d;

    也可以写成     cin>>a;    

                       cin>>b;    

                       cin>>c;    

                       cin>>d;

    以上3种情况均可以从键盘输入: 1  2  3  4 ↙
    也可以分多行输入数据: 1↙ 2  3↙ 4↙
    在用cin输入时,系统也会根据变量的类型从输入流中提取相应长度的字节。

    如有    char c1, c2;    int a;    float b;    

         cin>>c1>>c2>>a>>b;

         如果输入 1234 56.78↙
    注意: 34后面应该有空格以便和56.78分隔开。也可以按下面格式输入: 1 2 34 56.78↙ (在1和2之间有空格)
    不能用cin语句把空格字符和回车换行符作为字符输入给字符变量,它们将被跳过。如果想将空格字符或回车换行符(或任何其他键盘上的字符)输入给字符变量,可以使用getchar函数。
    在组织输入流数据时,要仔细分析cin语句中变量的类型,按照相应的格式输入,否则容易出错。

    在输入流与输出流中使用控制符

    上面介绍的是使用cout和cin时的默认格式。但有时人们在输入输出时有一些特殊的要求,如在输出实数时规定字段宽度,只保留两位小数,数据向左或向右对齐等。C++提供了在输入输出流中使用的控制符(有的书中称为操纵符),见表3.1。

    表 3.1 输入输出流的控制符
    控制符 作 用
    dec 设置数值的基数为10
    hex 设置数值的基数为16
    oct 设置数值的基数为8
    setfill(c) 设置填充字符c,c可以是字符常量或字符变量
    setprecision(n) 设置浮点数的精度为n位。在以一般十进制小数形式输出时,n代表有效数字。在以fixed(固定小数位数)形式和 scientific(指数)形式输出时,n为小数位数
    setw(n) 设置字段宽度为n位
    setiosflags( ios::fixed) 设置浮点数以固定的小数位数显示
    setiosftags( ios::scientific) 设置浮点数以科学记数法(即指数形式)显示
    setiosflags( ios::left) 输出数据左对齐
    setiosflags( ios::right) 输出数据右对齐
    setiosflags( ios::skipws) 忽略前导的空格
    setiosflags( ios::uppercase) 数据以十六进制形式输出时字母以大写表示
    setiosflags( ios::lowercase) 数据以十六进制形式输出时宇母以小写表示
    setiosflags(ios::showpos) 输出正数时给出“+”号

    需要注意的是: 如果使用了控制符,在程序单位的开头除了要加iostream头文件外,还要加iomanip头文件。
    举例, 输出双精度数:     double a=123.456789012345;  // 对a赋初值
    1) cout<<a;  输出: 123.456 2) cout<<setprecision(9)<<a;  输出: 123.456789 3) cout<<setprecision(6);  恢复默认格式(精度为6) 4) cout<< setiosflags(ios∷fixed);  输出: 123.456789 5) cout<<setiosflags(ios∷fixed)<<setprecision(8)<<a;  输出: 123.45678901 6) cout<<setiosflags(ios∷scientific)<<a;  输出: 1.234568e+02 7) cout<<setiosflags(ios∷scientific)<<setprecision(4)<<a;  输出: 1.2346e02
    下面是整数输出的例子:     int b=123456;  // 对b赋初值 1) cout<<b;  输出: 123456 2) cout<<hex<<b;   输出: 1e240 3) cout<<setiosflags(ios∷uppercase)<<b;  输出: 1E240 4) cout<<setw(10)<<b<<','<<b;   输出:  123456,123456 5) cout<<setfill('*')<<setw(10)<<b;  输出: **** 123456 6) cout<<setiosflags(ios∷showpos)<<b;  输出: +123456
    如果在多个cout语句中使用相同的setw(n),并使用setiosflags(ios::right),可以实现各行数据右对齐,如果指定相同的精度,可以实现上下小数点对齐。
    【例3.1】各行小数点对齐。

    1. #include <iostream>
    2. #include <iomanip>
    3. using namespace std;
    4. int main( )
    5. {
    6. double a=123.456,b=3.14159,c=-3214.67;
    7. cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2);
    8. cout<<setw(10)<<a<<endl;
    9. cout<<setw(10)<<b<<endl;
    10. cout<<setw(10)<<c<<endl;
    11. return 0;
    12. }
    #include <iostream>
    #include <iomanip>
    using namespace std;
    int main( )
    {
      double a=123.456,b=3.14159,c=-3214.67;
      cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2);
      cout<<setw(10)<<a<<endl;
      cout<<setw(10)<<b<<endl;
      cout<<setw(10)<<c<<endl;
      return 0;
    }

    输出如下:   123.46 (字段宽度为10,右对齐,取两位小数) 3.14   -3214.67 先统一设置定点形式输出、取两位小数、右对齐。这些设置对其后的输出均有效(除非重新设置),而setw只对其后一个输出项有效,因此必须在输出a,b,c之前都要写setw(10)。
    另外,还有一种控制输出格式的方法,我们将会在后面讲到,感兴趣的读者可以查看:C++格式化输出

  • 相关阅读:
    mouse_event模拟鼠标滚轮
    润乾报表配置技术路线
    建筑 物件 开心背单词 读句子,单词,字母,看图例, 翻译,看动画
    文字过渡动画,曲线过渡动画,,使用这个插件assign shape keys
    运动锻炼 开心背单词 读句子,单词,字母,看图例, 翻译,看动画,学英语,轻松背单词,简单背单词
    blender293 内置插件 精度绘画控件,PDT学习003,pdt tangents 切线
    日常用品 背单词 读句子 看图片 读单词 读字母 翻译, 看动画 学英语
    blender293 内置插件 精度绘画控件,PDT学习 precision drawing tools
    乔布斯 背单词 02 读句子 单词 字母 翻译,看动画 学英语 名言 我菜顾我在,我菜故我在,blender加python
    狐狸 和 乌鸦 英语 朗读句子 背单词
  • 原文地址:https://www.cnblogs.com/david-wei0810/p/6046086.html
Copyright © 2011-2022 走看看