如何使用setw或tab在列中正确输出?

时间:2015-05-27 06:20:35

标签: c++

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

long long int factorial(long long int n)//Factorial Function
{
  return (n == 1 || n == 0) ? 1 : factorial(n - 1) * n;
}

int main()
{
    float summ=0;
    float x=0;
    cout<<"Enter x value: "<<endl;
    cin>>x;
    float prespecified_error=0;
    cout<<"Enter prespecified error: "<<endl;
    cin>>prespecified_error;
    float true_value=0;
    true_value=exp(-x);
    cout<<true_value<<endl;
    float approx_error=10000000;
    float true_error=10000000;
    int i=0;
    float prev_value=0;
    cout<<"Value"<<setw(10)<<right<<"True error"<<setw(10)<<right<<"Approximate error"<<endl;//Output is not columned.
    while((prespecified_error<=true_error) || (prespecified_error<=approx_error)){
    summ=summ+(pow(-1,i)*(pow(x,i)/factorial(i)));
    true_error=((true_value-summ)/true_value)*100;
    if(true_error<0){
        true_error=true_error*(-1);
        }
    approx_error=((summ-prev_value)/summ)*100;
    if(approx_error<0){
        approx_error=approx_error*(-1);
        }
    prev_value=summ;
    cout<<summ<<setw(10)<<right<<true_error<<setw(10)<<right<<approx_error<<endl;//Output is not columned.  
    i=i+1;
    }
    return 0;
}

输出:::

0.00673795
Value           True error          Approximate error
1           14741.3         100
-4          59465.3         125
8.5         126051          147.059
-12.3333            183143          168.919
13.7083         203350          189.97
-12.3333            183143          211.149
9.36806         138934          231.653
-6.13294            91120.8         252.75
3.55518         52663.6         272.507
-1.8271         27216.6         294.58
0.86404         12723.5         311.461
-0.359208           5431.12         340.54
0.150479            2133.3          338.71
-0.0455546          776.09          430.326
0.0244573           262.978         286.262
0.00111998          83.378          2083.73
0.00841288          24.8582         86.6873
0.00626791          6.97596         34.2215
0.00686374          1.86688         8.68077
0.00670694          0.460185            2.33782

2 个答案:

答案 0 :(得分:1)

在输出setw()之前,您没有使用任何字段宽度控制(即没有summ ...之后您处于可变偏移位置并且让其他领域排队已经太晚了。只需有条不紊地处理输出语句,可能会输入'|'或其他字符来显示输出的每个部分添加了多少右侧边距,这样您就可以集中精力让它们排成一行,然后在你有正确的字段宽度后删除它们。

答案 1 :(得分:0)

您尚未设置summ的参数宽度。

std::cout << std::right 
          << std::setw(10) << summ
          << std::setw(10) << true_error
          << std::setw(10) << approx_error << std::endl;

作为旁注,您只需指定std::right一次