初入C++:
跟C语言很多都很相似,主要从不同之处学习。
(1)、I/O流控制:流是一种抽象概念,他代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出。
C++中的输出就是cout,我们可以使用插入操作符“<<”向cout输出流中插入字符。
而输入就是cin,用">>"从输入流中抽取字符。
不管把什么基本数据类型的名字或值传给流,他都能懂。
cout可以在一行中串联,也可以分在几行,提高可读性,cin也可以用和cout一样的方式调整行,它自动识别变量位置和类型。比如:
cout<<"My name is John\n";
cout<<"the ID is";
cout<<2;
cout<<endl;
//等效于下面的几种形式1
cout<<"My name is John\n"<<"the ID is"<<2<<endl;
//2
cout<<"My name is John\n" //行末无分号
<<"the ID is"
<<2
<<endl;
(2)、使用控制符
流的默认格式输出有时不能满足特殊要求。例如:
double average = 9.400067;
cout << average <<endl;
希望显示的是9.40,即保留两位小数,可是却会显示9.40007,默认显示6位有效位。
所以可以用控制符,对I/O流的格式进行控制。控制符是在头文件iomanip中定义的对象。可以直接将控制符插入流中,常用控制符所示。如:
使用控制符时,要在程序头上加上头文件#include<iomanip>。
(3)控制浮点数值显示
使用setprecision(n)可控制输出流显示浮点数的数字个数,C++默认的输出流值有效位数是6.
如果是setprecision(n)与fixed合用,可以控制小数点右边的数字个数。fixed是设置定点小数表示法。
如果与scientific合用,可以控制指数表示法的小数位数。
例如:
在普通表示的输出中,setprecision(n)表示有效位数。
在确定表示的输出中,setprecision(n)表示小数位数,这就是第七行输出结果的原因。
而在指数形式输出时,setprecision(n)表示小数位数,例如第八行,输出用scientific来表示指数的输出形式,其有效位数沿用上次设置的值8,小数位数截短显示时,进行四舍五入处理。
(4)设置值的输出宽度
除了使用空格来强行控制输出间隔外,还可以用setw(n)控制符。
如果一个值的显示数需要比setw (n) 确定的字符n更多,就会显示该值的所有字符,
如果比之更少,就会在数字字符前显示空白。它不同于其他控制符,它仅仅影响下一个数值的输出,不会保存。
(5)输出八进制数和十六进制数
3个常用的控制符是hex、oct和dec,分别对应十六进制、八进制和十进制数的显示,定义一个整数时,如果在之后使用hex、oct,是在原本的十进制数上计算机自动帮你进行进制转化,而不能把它理解成十六进制数或八进制数。
还有用uppercase可以控制16进制数大写输出。例如:
int number=1001;
cout<<"Hexadecimal:"<<hex<<uppercase<<number<<endl;
//结果显示为
//Hexadecimal:3E9
(6)设置填充字符
setw可以用来确定显示的宽度。默认时,流使用空格符来保证字符间的正确间隔。用setfill控制符可以确定setw所规定的间隔字符。setfill在头文件iomanip中定义。例如:
(7)左右对齐输出
默认时,I/O流左对齐子串,右对齐数值。使用left和right标志,可以控制输出对齐,例如:
(8)强制显示小数点和符号
当程序输出下面的代码时:
cout<<10.0/2<<endl;
默认的流会简单的显示2,不会显示小数点,当需要显示小数点时,可以用showpoint标志。
cout<<showpoint<<10.0/5<<endl;
//运行结果为:
//2.00000
默认时,流仅在负数之前显示值的符号,我们可以用showpos来在正数前加正数,例如:
cout<<showpos<<10<<" "<<-20<<endl;
//运行结果为:
//+10 -20