应用fstream格式化输出

我举一个我应用的例子

                        
                         file.open("shoroud.jrf" ,ios_base::trunc); //打开文件,清空文件内容

                         if(!file.good())
                         {
                                     printf("Cannot open the file\n" );
                            return;
                         }
                        
                         file<<"ic_curve point CURVES crv.00 {" <<endl;
                         file.precision(8);        
                         file.flags(ios::left|ios::fixed);
                         file.fill('0' );
                         for(int i=0;i<shroudX.size();i++){

                                     file<<"{    " ;
                                     file.width(14);
                                     file<<shroudX[i];
                                     file<<"    " ;
                                     file.width(14);
                                     file<<0;
                                     file<<"    " ;
                                     file.width(14);
                                     file<<shroudY[i]<<"}" <<endl;

                         }
                         file<<"}" <<endl;
                         file<<"ic_uns_subset_delete {}" ;
                         file.close();

file有4个函数要注意:

1.                         file.precision(8);        
2.                         file.flags(ios::left|ios::fixed);
3.                         file.fill('0' );
4.                         file.width(14);

前三个函数是一次设定始终有效,而第四个2只对下一次输入有效。依次解释这四个函数的意义:
file.precision(3); 设定精度,小数点后有效数的位数,若输出0.32456,结果为0.324,;若输出0.3,结果为0.3。也就是对缺少的位数该函数不会去补充;
file.fill('0' );该函数的作用就是把空出来的位数用某一字符来补充。但注意仅设置precision的情况下是不会补充的。因为precision只负责精度
,而不会限定具体位数。
file.width(14);则是限定输出的位数。但在系统优先满足精度,输出位数可能无法保证。例如321.45678,若设定8位宽度,5位精度,最终结果是321.45678。即优先满足精度要求,其次满足宽度要求。同样上例中若精度为2位,结果为321.45.剩下的可以用fill来补充
但设定以上三种条件也无法得出满意的结果。因为系统默认数字右对齐,也就是填充字符会填充在数字的左边!此时必须进步设定file.flags(ios::left|ios::fixed);其中ios::left是令字符左对齐,而ios::fixed,该参数指定的动作是以带小数点的形式表示浮点数,并且在允许的精度范围内尽可能的把数字移向小数点右侧;

posted @ 2017-11-21 20:32  上官栋  阅读(2059)  评论(0编辑  收藏  举报