必备技能1.7:从键盘读取输入
前面的程序中使用的都是显示指定的数据。例如,计算面积的程序计算的是长为7,宽为5的矩形的面积,矩形的尺寸本身就是程序的一部分。然而,不管矩形的尺寸是多少,其面积的计算方法都是一样的。因此,如果能够提示用户从键盘输入矩形的尺寸,然后计算矩形的面积的话,那么这个程序将够有用一些。
我们可以使用>>运算符来使用户从键盘输入数据到程序中。这就是C++中的输入运算符。通常使用下面的形式从键盘获取数据
cin>> var;
其中,cin是另外一个预先定义好的标识符。它代表控制台输入,这是C++自动支持的。缺省情况下,cin是和键盘绑定的,它也可以被重定向到其它的设备上。var代表接收输入的变量。
下面重写计算面积的程序,允许用户输入矩形的尺寸:
- /*
- 用来计算矩形面积的交互式程序
- */
- #include <iostream>
- using namespace std;
- int main()
- {
- int lenght; // 声明一个变量
- int width; // 声明另外一个变量
- cout << "Enter the length:";
- cin >> length; //从键盘输入长度
- cout << "Enter the width:";
- cin >> width; //从键盘输入宽度
- cout << "The area is ";
- cout << length * width; //输出面积
- return 0;
- }
运行的结果可能如下:
Enter the length: 8
Enter the widht: 3
The area is 24
请注意下面的几行:
cout << "Enter the length:"
cin >> length; //从键盘输入长度
cout语句提示用户输入数据。cin语句读取用户输入的数据,并把值存储在变量length中。于是,用户键入的数值(就本例中的程序,用户必须输入一个整型数)就被存放在了>>右侧的变量中(本例中就是length)。在执行完毕cin语句后,变量length存放的就是矩形的长度(如果用户键入的是非数字,变量lenght的值将会是0)。提示用户输入宽度和从键盘读取矩形长度的语句工作原理是一样的。
一些输出选项
到目前为止,我们一直使用的都是cout的最简单的形式。然而,cout可用来输出更复杂的语句。下面是两个有用的技巧。首先,我们可以使用一个cout语句输出多条信息。比如,在计算面积的程序中,我们使用下面的两行来输出面积:
cout << "The area is ";
cout << length * width;
这两行代码可以使用下面更方便的语句来表达:
cout << "The ares is " << length * width;
这种方式在同一个cout语句中使用了两个输出运算符,这将在输出字符串"Ther area is "后接着输出面积。通常情况下,我们可以在一条输出语句中连接多个输出运算符,每个输出项单独使用一个运算符即可。
第二个技巧,到目前为止我们还没有换行输出,也就是回车。但是不久我们就需要这样输出了。在字符串中我们使用"/n"表示换行,试试下面的程序就可以看到"/n"的效果了。
- /*
- 这个程序演示了/n的用法,可以输出换行
- */
- #include <iostream>
- using namespace std;
- int main()
- {
- cout << "one\n";
- cout << "two\n";
- cout << "three";
- cout << "four";
- return 0;
- }
one
two
threefour
换行字符可以被放置在字符串中的任意位置,并不一定是放置在最后。在理解了换行字符的作用后,就可以自己写程序看看结果了。
练习:
1.C++中的输入运算符是哪个?
2.缺省情况下,cin是和那个设备进行绑定的?
3./n代表什么?
答案
1.输入运算符是>>
2.c缺省地是和键盘绑定。
3./n代表换行字符。
其它的数据类型
在前面的程序中,我们使用的都是int类型的变量。int类型的变量只能用来存储整型数。当需要存储小数的时候,int类型的变量就不能使用了。比如,一个int类型的变量可以用来存储值18,但是不能用来存储值18.3。幸运的是,int类型只是C++中定义的几种数据类型之一。C++定义了两种浮点类型来表示小数:float和double类型,它们分别代表单精度和双精度的小数。其中,double可能是最常用的了。
可以采用类似下面的方式来声明一个double类型的变量:
double result;
这里,result是变量的名称,它的类型是double类型的。因为它的类型是浮点类型,因此可以被用来存放诸如88.56或者-107.03之类的数据。
为了更好地理理解int和double类型的区别,可以试一试下面的程序:
- /*
- 这个程序展示了int 类型和double类型的区别
- */
- #include <iostream>
- using namespace std;
- int main()
- {
- int ivar; //声明一个整形的变量
- double dvar; //声明一个浮点型的变量
- ivar = 100;//给ivar赋值100
- dvar =100.0;//给dvar赋值100.0
- cout<< "Original value of ivar: " << ivar << "\n";
- cout<< "Original value of dvar: "<< dvar << "\n";
- cout<< "\n"; //打印一个空行
- //各自都除以3
- ivar=ivar/3;
- dvar=dvar/3.0
- cout << "ivar after division: " << ivar << "\n";
- cout << "dvar after division: " <<dvar <<"\n"
- return 0;
- }
程序的输出如下:
Original value of ivar: 100
Original value of dvar: 100
ivar after division: 33
dvar after division: 33.3333
从上面的例子可以看出,当ivar除以3的时候,得到的结果是33,小数部分丢失了。而dvar除以3后,小数部分是被保留的。
该程序中还有一个新的需要注意的地方:
cout << "/n" //输出一个空行
这句将输出一个空行。可以在需要任何需要输出空行的地方使用该语句。
专家解答
问:
为什么C++中用两种不同的数据类型来分别表示整型数和浮点数了?也就是说,为什么不是所有的数据都仅仅使用一个类型了?
答:
C++提供了不同的类型是为了程序的效率更高。比如,整形数的运算要比浮点数的运算快。因此,如果不需要小数,就没有必要引入float或者double类型带来的开销。还有就是,各种类型的数据在存储的时候所需的内存的大小也是不一样的。通过支持不同的数据类型,C++使得我们可以最好地利用系统的资源。最后,一些算法是需要一些特定类型的数据的。C++提供了大量的内置类型以提供最好的灵活性