C++ C++;如何对齐多个输出?

C++ C++;如何对齐多个输出?,c++,C++,我有一个问题需要解决,我需要在哪里以这种格式显示输出: 但我面临的问题是,对于有两个书名的Purchase ID:2,第二个书名(Midnight Library)显示在第二行,并且没有正确对齐,我如何在书名下对齐它 代码: void viewPurchase()//查看所有采购交易记录 { 系统(“cls”); 结构purchaseInfo*viewPurchase; viewPurchase=头; 智力选择; 库特 但是第二个书名(午夜图书馆)跑掉了,没有正确对齐,我怎么能在书名下对齐它呢

我有一个问题需要解决,我需要在哪里以这种格式显示输出:

但我面临的问题是,对于有两个书名的
Purchase ID:2
,第二个书名(Midnight Library)显示在第二行,并且没有正确对齐,我如何在
书名下对齐它

代码:

void viewPurchase()//查看所有采购交易记录
{
系统(“cls”);
结构purchaseInfo*viewPurchase;
viewPurchase=头;
智力选择;
库特
但是第二个书名(午夜图书馆)跑掉了,没有正确对齐,我怎么能在书名下对齐它呢


在插入书名之前,使用与第一列宽度匹配的
setw
插入空字符串。

您的代码未编译,请添加缺少的部分。问题是您只在循环之前写入一次购买ID。如果您希望后续循环迭代正确显示,则如果
loop
不可用ro您需要弥补该列中缺少的空格。例如,您可以执行类似于
cout的操作。我建议您避免对列宽使用硬编码值。相反,为每个列宽声明一些常量。请注意,这些可能与标题不对齐,因为这是使用制表符(尽管通常为8个字符,但其宽度倾向于开放以供解释)。您可以用相同的方式编写标题:
cout在c++20中可以使用std::format@paddy非常感谢你的帮助!!我已经解决了我的问题!!非常感谢你的帮助!!我已经解决了我的问题!!
void viewPurchase() //View all purchase transactions
{
    system("cls");
    struct purchaseInfo* viewPurchase;
    viewPurchase = head;
    int choice;

    cout << "*************" << endl;
    cout << "VIEW PURCHASE" << endl;
    cout << "*************" << endl;
    cout << "1. View Purchase" << endl;
    cout << " " << endl;
    cout << "0. BACK TO MENU" << endl;
    cout << "\nEnter your choice: ";
    cin >> choice;
    switch (choice)
    {
    case 1:
    {
        if (viewPurchase == NULL) {
            cout << "No record in the list\n";
            cout << "\nPress ENTER to Back to Menu...\n" << endl;
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
            cin.get();
        }

        while (viewPurchase != NULL) {
            cout << "============================================================================\n";
            cout << "Purchase ID \tBook Title \t\t      Total Item \tTotal Price\n";
            cout << "============================================================================\n";
            while (viewPurchase != NULL) {
                cout << left << setw(16) << viewPurchase->purchaseID;
                    for (int loop = 0; loop < viewPurchase->size; loop++) {
                        cout << left << setw(30) << viewPurchase->book[loop].bookTitle;
                        if (loop == 0) {
                            cout << left << setw(18) << viewPurchase->totalItem;
                            cout << left << setw(16) << viewPurchase->totalPrice;
                        }
                        cout << endl;
                    }
                viewPurchase = viewPurchase->next;
            }
        }           
        break;
    }
    case 0:
        break;
    default:
        cout << "\nInvalid selection. Press ENTER to continue...\n" << endl;
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cin.get();
        break;
    }
};