输出结果是 203.14
说明:
1、在输出第一个输出项20时,域宽为6,因此在20前面有4哥空格,在输出3.14时,width(6)已经不起作用,此时按系统默认deep域宽输出(按数据实际长度输出)。如果要求在输出数据时都按指定的同一域宽n输出,不能只调用一次width(),必须在输出每一项之前都要调用一次width(n)。
2、代码中的输出格式状态分为5组,每一组中同时只能选用一种,(例如dec、hex和oct中只能选一,它们是互相排斥的)。在用成员函数setf和setiosflags设置输出格式状态后,如果想改设置为同组的另一状态,应当调用成员函数unsetf(对应于成员函数self)或resetiosflags(对应于控制符setiosflags),先终止原来设置的状态,然后再设置其他状态,可以从本程序中看到这点。
3、cout.setf(ios::internal I ios::showpos); //包含两个状态标志,用“|”组合。
4、可以看到:对输出格式的控制,既可以用控制符,也可以用cout流的有关成员函数,二者的作用是相同的。
控制符在头文件iomanip中定义的,因此用控制符时,必须包含iomanip头文件。
cout流成员函数在iostream中定义,只需包含头文件iostream。
许多程序人员感到使用控制符方便简单,可以在一个cout输出语句中连续使用多种控制符。
8、函数put()-----专用于输出单个字符的成员函数put
1、cout.put( 'a' );-----------------------屏幕上显示一个字符a。
2、put函数的参数可以是字符或字符的ASCALL代码(也可以使一个整数表达式):
cout.put(65+32);--------------------也显示 a
3、也可以在一个语句中连续调用put函数:
cout.put(71).put(79).put(79). put(68).put('\n');
在屏幕上显示:GOOD.
应用:可以逆序输出字符串。
9、 cin输入流
1、cin是istream类的对象,它是从标准输入设备(键盘)获取数据,程序中的变量通过流提取符“>>”从流中提取数据。
2、流提取符“>>”从流中提取数据时通常跳过输入流中的空格、tab键、换行符等空白字符。
注意:只有在输入完数据再按回车键后,改行数据才被送到键盘缓冲区,形成输入流,提取运算符“>>”才能从中提取数据。需要注意保证从流中读取数据能正常进行。
例如:
int a,b;
cin>>a>>b;
若从键盘上输入:
21 abc
变量a从输入流中提取整数21(因为后面是空格,不是int型,所以只有21),提取操作成功,此时cin流处于正常状态。但在变量b准备提取一个整数时,遇到了字母a,显然提取操作失败了,此时,cin流被置为出错状态。只有在正常状态时,才能从输入流中提取数据。
3、当遇到无效字符或遇到文件结束符(不是换行符,是文件中的数据已读完)时,输入流cin就处于出错状态,即无法正常提取数据。此时对cin流的所有提取操作将终止。-----Ctrl + Z
while(cin>>grade) //能从cin流读取数据
{
}
10、get()函数读入一个字符:
三种形式:
注意第三种,它是读取n-1个字符。如果在读取n-1个字符之前遇到指定的终止字符,则会提前结束,不会读取那个终止字符。
11、getline()函数-----作用是从输入流中读取一行字符,其用法与带三个参数的get函数类似。即:
cin.getline(字符数组(或字符指针),字符个数n,终止标志字符)
这里,输入nihao/nanjing,会直接跳过输入的第三阶段,直接输出nanjing(不包括终止字符),因为都在缓冲区内,nanjing还没有被提取。如果把cin.getline(ch,20)换成cin.getline(ch,20,‘/’),那么就会执行第三个阶段,此时“\n”不是结束标志,而是被作为一个字符被读入。
getline函数和get函数不同之处:
用getline函数从输入流读字符时,遇到终止标志字符时结束,指针移到该终止标志字符之后,下一个getline函数将从该终止标志的下一个字符开始接着读入,如本程序运行结果所示那样。如果用cin.get函数从输入流读字符时,遇终止标志字符时停止读取,指针不向后移动,仍然停留在原位置。下一次读取时仍从该终止标志字符开始。
请比较用“cin<<”和用成员函数cin.getline()读数据的区别:
用“cin<<”读数据时,以空白字符(包括空格、tab键、回车键)作为终止标志,而用cin.getline()读数据时连续读取一系列字符,可以包括空格。
用“cin<<”可以读取C++的标准类型的各类型数据(如果经过重载,还可以用于输入自定义类型的数据),而用cin.getline()只能输入字符型数据。
12、 istream类成员函数
1、eof函数
eof函数是end of file的缩写,表示“文件结束”。从输入流读取数据,如果到达文件末尾(遇文件结束符),eof函数值为非零值(真),否则为0(假)。
?它能做到一句话。
2、peek函数---------“观察”,peek函数的作用是观测下一个字符。其调用形式为:
c = cin.peek();
函数的返回值是指针指向的当前字符,但它知识观测,指针仍停留在当前位置,并不后移。如果要访问的字符是文件结束符,则函数值是EOF(-1)。
3、putback函数--------将前面用get或者getline函数从输入流中读取的字符h返回到输入流,插入到当前指针位置,以供后面读取。其调用形式为:
cin.putback(ch);
4、ignore函数-------跳过输入流中n个字符,或在遇到指定的终止字符时提前结束。(此时跳过包括终止字符在内的若干字符)。其调用形式为:
ignore(n,终止字符)
例如:ignore(5,'A') //跳过输入流中5个字符,遇到‘A’后就不再跳类,也可以不带参数或只带一个参数。如:
ignore(); //n默认值是1,终止字符默认为EOF
相当于
ignore(1,EOF);