Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;无法将对齐的字符串存储在字符串变量中并打印它_C++ - Fatal编程技术网

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();