| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 976 人关注过本帖
标题:关于;格式输出控制符的疑惑
只看楼主 加入收藏
tianxiao110
Rank: 1
等 级:新手上路
帖 子:63
专家分:1
注 册:2010-7-23
结帖率:83.33%
收藏
已结贴  问题点数:10 回复次数:8 
关于;格式输出控制符的疑惑
刚开始学C++ ,前辈们别见笑哦!  呵呵。
疑惑是:
有的格式控制符输出一次,以后的数据输出格式就这样定了;
有的格式控制符输出一次,但他却只对后面的第一次输出有效;
我就困惑在那些控制符属于第一种,那些属于第二种啊??
我举个例子说明一下:
#include<iostream>
#include<iomanip>   
using namespace std;
int main()
{
    char *p="tianxiao";
    cout<<setw(10);    //这个控制符只对后面的第一次输出有效
    cout<<p<<endl;
    cout<<p<<endl;
    double a=3.1415926;
    cout<<"a="<<setprecision(4)<<a<<endl;   // 这个控制符却对后面的所有输出都有效。
    cout<<a<<endl;
    system("pause");
}
搜索更多相关主题的帖子: 格式 输出 
2010-08-02 16:21
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:3 
这个基本没用过,听听楼下高手的高论。呵呵。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-08-02 18:45
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:7 
还真是没太注意过这个,学的时候感觉这么设计挺合理的就记住了。效果是知道但为什么会这样呢?

后来学的多了,知道流的状态很多是靠标记实现的。刚才为了弄清楚你的这个问题,还特意查了一下标准,其中格式标记的类型是:
ios_base::fmtflags
它定义的记录信息有以下这些:
     *  - boolalpha
     *  - dec
     *  - fixed
     *  - hex
     *  - internal
     *  - left
     *  - oct
     *  - right
     *  - scientific
     *  - showbase
     *  - showpoint
     *  - showpos
     *  - skipws
     *  - unitbuf
     *  - uppercase
     *  - adjustfield
     *  - basefield
     *  - floatfield
正好没有你问的那两个。

仔细再看,你问的那两个分别记录在了另一个类型为 streamsize 的东东里了。而且这个类型还不定义在是 ios_bose 这个空间里的。
并且这两个虽然类型一样,但不是记录在同一个成员里的(而上面说到的 fmtflags 是在一个变量里记录所有的信息)。流类自己也只能通过 precision() 和 width() 这两个函数来操作。(<iomanip>里定义的 setprecision, setw 是这两个函数的包装。)
标准在 IO 这章里(至少是27章的第4节里,好像)根本没提这两个函数怎么影响流的输出。只是说“无参数调用它们返回的是现在的值。带参数调用,是将流的相关数据设置成新值,返回的是原来的值。“

可以肯定的是这两个函数的值是在插入的时候才影响的。感觉从实现的角度看,都是一直影响到底好像有比较好的一致性。但看来是宽度一值影响到底太不实用了,才特殊化了。

呵呵,搞了半天也没彻底弄明白你问的问题,又一次使我感觉到了 C++ 的博大精深。不过倒是在找资料的时候学了一大堆别的东西,比如说更深地领悟了一些操作符重载的技巧。和一些类型定义的使用方法和技巧~~
2010-08-03 03:39
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
嗯嗯,学习了。补上个知识点的说,赚了!!!

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-08-03 12:02
tianxiao110
Rank: 1
等 级:新手上路
帖 子:63
专家分:1
注 册:2010-7-23
收藏
得分:0 
回复 3楼 pangding
谢谢
2010-08-03 21:43
ToBeOOP
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:106
专家分:181
注 册:2010-7-8
收藏
得分:0 
看了此贴,感觉受益匪浅啊。。。
2010-08-07 17:53
伟伟110
Rank: 2
等 级:论坛游民
帖 子:34
专家分:12
注 册:2010-8-7
收藏
得分:0 
谢谢,学到了很多
2010-08-10 19:49
xiao92010
Rank: 2
来 自:江西,赣州
等 级:论坛游民
帖 子:16
专家分:17
注 册:2010-8-5
收藏
得分:0 
怎么我学的不像这么复杂哦,,我也开始学啊,,,
我们的开始的库文件是这个
#include"stdio.h"
main()
{

}
 我们的是这样子的。。。

今天的努力=明天的收获
2010-08-10 22:41
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复 3楼 pangding
您在哪里查标准呢?感觉您的学习方法值得我学习,总是从权威的标准找答案!

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-11 00:19
快速回复:关于;格式输出控制符的疑惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039566 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved