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

一种方法是对齐字符串文字,即为填充添加空格。

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

如果您仔细查看您的输出,您会发现这些数字与文本中的十个字符对齐,这正是您所要求的。

您应该改为格式化文本

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

哦,还有一个小提示:不要将浮点类型用于货币值。

于 2013-07-05T16:13:16.147 回答
0

请参阅std::string 格式(如 sprintf )中的许多详细答案。

C++ 可以很容易地使用 C 函数调用,但是对于一些你需要小心一点。C 的 printf() 或 sprintf() 调用是获得所需格式的两种方法。

于 2013-07-05T16:19:59.950 回答
0

尝试以下操作:

for (;;){
    cout << "Please select a drink: "<<endl;
for (int i = 0; i < arrsize; i++){
    cout << (i+1) << ". ";
    cout << left << setw(12) << setfill(' ') << arr[i].DrinkName;
    cout << setw(5) << fixed << arr[i].DrinkCost << endl;
}
于 2013-07-05T16:20:48.860 回答