如何对齐来自数组的不同长度的输出
How do you align output of different lengths coming from an array?
我正在制作一个饮料机程序,我希望所有的价格都一致。
有没有办法告诉编译器从行首开始写价格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
一种方法是对齐字符串文字,即添加空格进行填充。
Drinks arr[arrsize] = {
{"Cola ",.75,20},
{"Root Beer ",.75,20},
{"Lemon-Lime",.75,20},
{"Grape Soda",.80,20},
{"Cream Soda",.80,20},
};
如果仔细查看您的输出,您会发现数字与文本中的10个字符对齐,这正是您所要求的。
您应该格式化文本:
cout << (i+1)<<". " << std::setw(15) << std::left << arr[i].DrinkName
<< std::fixed << arr[i].DrinkCost << std::endl;
哦,还有一个小提示:不要对货币值使用浮点类型。
请参阅类似sprintf的std::string格式中的许多详细答案。
C++可以很容易地使用C函数调用,但对于某些函数调用,您需要格外小心。C的printf()或sprintf()调用是获得所需格式的两种方法。
尝试以下操作:
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;
}
相关文章:
- 使用递归输出数组
- C++ 输出数组中的最高元素
- 空指针(为缺少的输出数组调用的 create() 在 create,文件 /home/m/OpenCV/modules/
- C++ 为什么我会得到垃圾输出数组?
- C 默认如何输出数组
- 使用递归输出数组
- 从 VB6 调用的 C++ DLL 函数中的输出数组参数
- 递归函数,用于输出数组的最小数量
- 如何在 c++ 中水平输出数组
- 冒泡排序未正确排序或输出数组值
- 按相反顺序输出数组的元素
- 制作一个排列函数,输出数组中所有可能的排列
- OpenCV (c++)缝合器不写入输出数组
- 创建一个3x3x3阵列.用0到9之间的随机值填充.输出数组.找出3个最小值和3个最大值的输出
- 实现[B,C]=f(A)语法(函数f作用于具有两个或多个输出数组的数组)
- 双指针输出数组参数异常
- SWIG Python C++输出数组给出'unknown type'错误
- 以 XLL 为单位获取调用方定义的输出数组尺寸
- c++:如何从函数接收可变长度的输出数组
- 未定义的符号 输出数组 opencv fedora.