C++ C++;无法将对齐的字符串存储在字符串变量中并打印它
我的字符串对齐有问题 我正试图打印一份食品订单收据,其食品名称存储在多维数组(完整菜单)、价格(双倍价格)和数量(整数数量)中。在函数末尾,这些变量被转换为字符串并附加到字符串变量(订单)中。循环结束后,打印出来。请忽略每个订单的总价计算。稍后将进行此操作C++ C++;无法将对齐的字符串存储在字符串变量中并打印它,c++,C++,我的字符串对齐有问题 我正试图打印一份食品订单收据,其食品名称存储在多维数组(完整菜单)、价格(双倍价格)和数量(整数数量)中。在函数末尾,这些变量被转换为字符串并附加到字符串变量(订单)中。循环结束后,打印出来。请忽略每个订单的总价计算。稍后将进行此操作 #include <iostream> #include <typeinfo> #include <iomanip> using namespace std; voi
#include <iostream>
#include <typeinfo>
#include <iomanip>
using namespace std;
void menu() {
string full_menu [3][6] = {{"A. Chicken",
"1.chicken leg barbecue",
"2.general chicken",
"3.chicken liver abodo",
"4.buffalo wings",
"5.Permesan wings"},
{"B. Soup",
"1.mushroom soup",
"2.cream of corn soup",
"3.hototay soup",
"4.Papaitan soup",
"5.Bulalo soup"},
{"C. Beverages",
"1.coke",
"2.diet coke",
"3.cherry coke",
"4.sprite",
"5.Aqua-Panna"
}};
for(int parent=0; parent<3; parent++)
{
for(int child=0;child<6;child++)
{
cout<<full_menu[parent][child]<<endl;
}
}
//user select the choices and quantity
string orders;
int quantity;
double price;
for (int i =0; i <=i ;i++) {
//food_name//
cout << "Enter your orders(example A1 or b3: ";
int main_menu_number=0;
char main_menu;
int sub_menu = 0;
cin >> main_menu;
if (main_menu == 'a' || main_menu == 'A') {
main_menu_number = 0;
} else if (main_menu == 'b' || main_menu == 'B') {
main_menu_number = 1;
} else if (main_menu == 'c' || main_menu == 'C') {
main_menu_number = 2;
} else if(main_menu=='x'||main_menu=='X'){
break;
}
cin>>sub_menu;
//price//
if (main_menu_number==0&&sub_menu==1){
price=5.00;
} else if(main_menu_number==0&&sub_menu==2) {
price=7.00;
}else if(main_menu_number==0&&sub_menu==3) {
price=5.50;
}else if(main_menu_number==0&&sub_menu==4) {
price=8.00;
}else if(main_menu_number==0&&sub_menu==5) {
price=7.50;
}else if(main_menu_number==1&&sub_menu==1) {
price=4.00;
}else if(main_menu_number==1&&sub_menu==2) {
price=5.50;
}else if(main_menu_number==1&&sub_menu==3) {
price=7.00;
}else if(main_menu_number==1&&sub_menu==4) {
price=8.00;
}else if(main_menu_number==1&&sub_menu==5) {
price=7.50;
}else if(main_menu_number==2&&sub_menu==1) {
price=1.50;
}else if(main_menu_number==2&&sub_menu==2) {
price=1.50;
}else if(main_menu_number==2&&sub_menu==3) {
price=1.50;
}else if(main_menu_number==2&&sub_menu==4) {
price=1.50;
}else if(main_menu_number==2&&sub_menu==5) {
price=0.30;
}
cout<<"Enter quantity :";
cin>>quantity;
orders.append(full_menu[main_menu_number][sub_menu]+" "+to_string(quantity)+" "+to_string(price)+"\n");
}
cout<<orders;
}
int main()
{
menu();
}
我尝试的预期输出是:
1.chicken leg barbecue 2 5.000000
3.cherry coke 2 1.500000
请建议。使用
std::stringstream
,这样您就可以在其上使用输出运算符,而不是std::string
您还需要在项目名称之前使用setw()
,使它们具有相同的宽度
std::stringstream orders;
...
orders << setw(20) << full_menu[main_menu_number][sub_menu] << setw(5) << quantity << setw(5) << price << "\n";
std::stringstream顺序;
...
顺序在代码中的什么位置使名称后面的空格数取决于名称的长度?您只有一个以4个空格作为分隔符的字符串。这应该如何对齐下一列?我尝试了下面的代码。附加(完整菜单[主菜单编号][子菜单]的,但是你的建议帮助我尝试更改setw()数字,看看我是否能使其工作。谢谢。在项目名称之前,你需要使用setw()
。
std::stringstream orders;
...
orders << setw(20) << full_menu[main_menu_number][sub_menu] << setw(5) << quantity << setw(5) << price << "\n";
cout << orders.str();