0

ドリンク マシン プログラムを作成していて、すべての価格を一緒に並べたいと思っています。

飲み物の名前が投稿された後にスペースを追加する代わりに、行頭から価格X個のスペースを書き込むようにコンパイラに指示する方法はありますか?

int main()
{
const int arrsize = 5;
Drinks arr[arrsize] = {
    {"Cola",.75,20},
    {"Root Beer",.75,20},
    {"Lemon-Lime",.75,20},
    {"Grape Soda",.80,20},
    {"Cream Soda",.80,20},
};

for (;;){
    cout << "Please select a drink: "<<endl;
for (int i = 0; i < arrsize; i++){
    cout << (i+1)<<". "<< arr[i].DrinkName;
    cout << setw(10) << setfill(' ')<< right <<fixed << arr[i].DrinkCost<<endl;
}
cout <<"6. Quit";

break;
}

return 0;
}

私が欲しいのは、それが次のようになることです:

Please select a drink:
1. Cola            0.75
2. Root Beer       0.75
3. Lemon-Lime      0.75
4. Grape Soda      0.80
5. Cream Soda      0.80
6. Quit

しかし、次のようになります。

Please select a drink:
1. Cola        0.75
2. Root Beer     0.75
3. Lemon-Lime      0.75
4. Grape Soda      0.80
5. Cream Soda      0.80
6. Quit
4

4 に答える 4

2

これを行う 1 つの方法は、文字列リテラルを揃えることです。つまり、パディングのためにスペースを追加します。

Drinks arr[arrsize] = {
    {"Cola      ",.75,20},
    {"Root Beer ",.75,20},
    {"Lemon-Lime",.75,20},
    {"Grape Soda",.80,20},
    {"Cream Soda",.80,20},
};
于 2013-07-05T16:12:55.960 に答える
1

出力をよく見ると、数値がテキストから 10 文字に調整されていることがわかります。これは、まさに要求したとおりです。

代わりにテキストをフォーマットする必要があります。

cout << (i+1)<<". " << std::setw(15) << std::left << arr[i].DrinkName
     << std::fixed << arr[i].DrinkCost << std::endl;

ああ、ちょっとしたヒント: 金銭的な値に浮動小数点型を使用しないでください。

于 2013-07-05T16:13:16.147 に答える