2017-12-07 13 views
0

テーブルの書式を正しく設定して、各列の下の値をその列の最初の文字から始めるようにしています。私は3つの列のフォーマットを成功させましたが、K CountとLM Countの列を整形して整然とした形で印刷する方法を理解することはできません。このテーブルを適切にフォーマットするにはどうすればよいですか?

KカウントとLMカウントの列がきれいに印刷されるように、コードのwhileループ部分に加えることができる修正は何ですか?

void printTable(const vector<int>& z, const vector<long>& x, const 
vector<long>& y, 
const vector<int>& a, const vector<int>& b) 
{ 
ostringstream ss; 
ss << "\n\n\n" << setw(10) << left << "Digits" << "Input Numbers  " 
    << setw(11) << right << "K Output " << setw(6) 
    << right << "K Count  " << setw(10) << right << "LM Output " << setw(6) 
    << right << "LM Count" << endl; 


int i = 0, n = 0; 
while (i < 5) 
{ 
    string q = to_string(z[2*n]) + " x " + to_string(z[abs(2*n + 1)]); 
    string r = to_string(x[i]); 
    string s = to_string(a[i]); 
    string t = to_string(y[i]); 
    string u = to_string(b[i]); 

    ss << setw(10) << left << (i+1) << q 
     << setw(16) << right << r 
     << setw(11) << right << s 
     << setw(12) << right << t 
     << setw(10) << right << u << endl; 

    i++; 
    n++; 
} 

string r = ss.str(); 
cout << r; 
} 

enter image description here

+0

コードのスクリーンショットではなく、コードを投稿してください。 –

+0

申し訳ありません、できるだけ早く編集を掲載します。 – JURO312

+0

「正しい」とは何ですか? – UKMonkey

答えて

1

次を印刷している:
- 直接幅
を指定せずに入力された番号が続く - - K桁は10文字
上で左揃え16文字を超える出力を右揃え
入力番号の幅を指定する必要がありますsも同様です。
この試し:

ss << setw(10) << left << (i+1) << 
     setw(16) << left << q << 
     setw(10) << right << s << 
     setw(12) << right << t << 
... 

を各列の正確な幅は、正確ではないかもしれません。自分で試してみてください。

1

K Count出力を修正するには、前回の結果の幅を設定した後にカーソルをリセットしてから右に戻す必要があります。このようなものは、あなたが望むことをする必要があります。

ss << setw(10) << left << (i+1) << right 
    setw(16) << left << q << right << 
    setw(11) << left << r << right << 
    setw(12) << left << s << right << 
    setw(12) << left << t << right << 
    setw(10) << left << u << right << endl; 
関連する問題