• C++ 基础教程
  • JavaScript入门教程
  • 博客文章
  • 访客留言
  • 联系站长
  • 论坛

  • 1.4 控制台交互(Communication through console)

    控制台(console)是电脑的最基本交互接口,通常包括键盘(keyboard)和屏幕(screen)。键盘通常为标准输入设备,而 屏幕为标准输出设备。

    在C++的iostream函数库中,一个程序的标准输入输出操作依靠两种数据流:cin 给输入使用和cout给输出使用。另外,cerrclog也已经被实现――它们是两种特殊设计的数据流专门用来显示出错信息。它们可以被重新定向到标准输出设备或到一个日志文件(log file)。

    因此cout (标准输出流)通常被定向到屏幕,而cin (标准输入流)通常被定向到键盘。

    通过控制这两种数据流,你可以在程序中与用户交互,因为你可以在屏幕上显示输出并从键盘接收用户的输入。


    输出Output (cout)

    输出流cout与重载(overloaded)运算符<<一起使用:

    cout << "Output sentence"; // 打印Output sentence到屏幕上
    cout << 120; // 打印数字 120 到屏幕上
    cout << x; // 打印变量 x 的值到屏幕上

    运算符<<又叫插入运算符(insertion operator) 因为它将后面所跟的数据插入到它前面的数据流中。在以上的例子中,字符串常量Output sentence,数字常量120和变量x先后被插入输出流cout中。注意第一句中字符串常量是被双引号引起来的。每当我们使用字符串常量的时候,必须用引号把字符串引起来,以便将它和变量名明显的区分开来。例如,下面两个语句是不同的:

    cout << "Hello"; // 打印字符串Hello到屏幕上
    cout << Hello; // 把变量Hello存储的内容打印到屏幕上

    插入运算符insertion operator (<<)可以在同一语句中被多次使用:

    cout << "Hello, " << "I am " << "a C++ sentence";

    上面这一行语句将会打印 Hello, I am a C++ sentence 到屏幕上。插入运算符(<<) 的重复使用在我们想要打印变量和内容的组合内容或多个变量时有所体现:

    cout << "Hello, I am " << age << " years old and my zipcode is " << zipcode;

    如果我们假设变量age的值为24,变量zipcode的值为90064,以上句子的输出将为: Hello, I am 24 years old and my zipcode is 90064

    必须注意,除非我们明确指定,cout并不会自动在其输出内容的末尾加换行符,因此下面的语句:

    cout << "This is a sentence.";
    cout << "This is another sentence.";

    将会有如下内容输出到屏幕:

    This is a sentence.This is another sentence.

    虽然我们分别调用了两次cout,两个句子还是被输出在同一行。所以,为了在输出中换行,我们必须插入一个换行符来明确表达这一要求。在C++中换行符可以写作\n:

    cout << "First sentence.\n ";
    cout << "Second sentence.\nThird sentence.";
    将会产生如下输出:
    First sentence.
    Second sentence.
    Third sentence.

    另外,你也可以用操作符endl来换行,例如:

    cout << "First sentence." << endl;
    cout << "Second sentence." << endl;

    将会输出:

    First sentence.
    Second sentence.

    当操作符endl被用在buffered streams中时有一点特殊:它们被flushed。不过cout 默认为unbuffered,所以不会被影响。 你可以暂时不管这一点。

    你可以使用\n或endl来指定cout输出换行,请注意前面所讲的两者的不同用法。


    输入Input (cin)

    C++中的标准输入是通过在cin数据流上重载运算符extraction (>>) 来实现的。它后面必须跟一个变量以便存储读入的数据。例如:

    int age;
    cin >> age;

    声明一个整型变量age然后等待用户从键盘输入到cin并将输入值存储在这个变量中。

    cin 只能在键盘输入回车键(RETURN)后才能处理前面输入的内容。因此即使你只要求输入一个单独的字符,在用户按下回车键(RETURN)之前cin将不会处理用户的输入的字符。

    在使用cin输入的时候必须考虑后面的变量类型。如果你要求输入一个整数,extraction (>>) 后面必须跟一个整型变量,如果要求一个字符,后面必须跟一个字符型变量,如果要求一个字符串,后面必须跟一个字符串型变量。

    // i/o example
    #include <iostream.h>
    int main ()
    {
    int i;
    cout << "Please enter an integer value: ";
    cin >> i;
    cout << "The value you entered is " << i;
    cout << " and its double is " << i*2 << ".\n";
    return 0;
    }
    Please enter an integer value: 702
    The value you entered is 702 and its double is 1404.

    使用程序的用户可以使引起错误的原因之一,即使是在最简单的需要用cin做输入的程序中(就像我们上面看到的这个程序)。因为如果你要求输入一个整数数值,而用户输入了一个名字(一个字符串),其结果可能导致程序产生错误操作,因为它不是我们期望从用户处获得的数据。当你使用由cin 输入的数据的时候,你不得不假设程序的用户将会完全合作而不会在程序要求输入整数的时候输入他的名字。后面当我们看到怎样使用字符串的时候,我们将会同时看到一些解决这一类出错问题的办法。

    你也可以利用cin 要求用户输入多个数据 :

    cin >> a >> b;

    等同于:

    cin >> a;
    cin >> b;

    在以上两种情况下用户都必须输入两个数据,一个给变量a,一个给变量b。输入时两个变量之间可以以任何有效的空白符号间隔,包括空格,跳跃符tab或换行。