我正在尝试在 C++ 中创建一个 table,但是分隔列的线没有对齐

I am trying to create a table in c++ but the lines separating the columns don't line up

在 c++ 中,我正在编写一个代码,该代码在 .txt 文件中创建一个 table 用于组织资金,我遇到一个问题,如果您不这样做,分隔列的行将不匹配'将正好正好 10 numbers/letters 放入框中。关于如何解决此问题的任何想法?

这是问题的截图

这是我的代码:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
    ofstream outputFile;
    double monday, tuesday, wednesday, thursday, friday;
    int columns;
    string categories;
    outputFile.open("organize.txt");
    cout << "How many columns do you need in your table? ";
    cin >> columns;
        outputFile << "| Categories |   Monday   |  Tuesday  |  Wednesday  |  Thursday  |   Friday   |\n";
        outputFile << "|------------|------------|-----------|-------------|------------|------------|\n";  
    for (int count = 1; count <= columns; count++)
    {
        cout << "Enter category (no more than "
        << count << ": ";
        cin >> categories;
        outputFile <<"| " << categories;
    }
    outputFile.close();
    return 0;
}

基本上我需要能够阻止用户输入超过 10 个 letters/numbers,同时如果他们使用少于 10 个字符则提供空白 space 来填充该区域。

虽然不完全清楚您打算如何填充 Monday - Friday 列,但您的 "Categories" 列是第一列,您可以使用 std::setw() 来确保该列被填充适当地。查看最多 10 个字符的 "Categories" 列,有 2 个空格(每边一个)和 2-| (每边一个)你有 14 个字符的总宽度。

因为categoriesstd::string,从用户输入后,你找到categories.size()输入的字符数。因此,要从用户那里读取类别,输出类别(在 "| " 之后),然后计算填充字段剩余部分所需的字符数(为最后的 '|' 节省空间),您可以使用:

std::setw(14-categories.size()-1)

将您的示例放在一起,用您可以执行的用户输入填充第一 Categories 列:

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>

int main (void) {

    std::ofstream outputFile;
    // double monday, tuesday, wednesday, thursday, friday;
    int columns = 0;
    std::string categories;
    outputFile.open("organize.txt");
    std::cout << "How many columns do you need in your table? ";
    if (!(std::cin >> columns)) {
        std::cerr << "stream error on input.\n";
        return 1;
    }
    outputFile << "| Categories |   Monday   |  Tuesday  |  Wednesday  "
                    "|  Thursday  |   Friday   |\n";
        outputFile << "|------------|------------|-----------|-------------"
                        "|------------|------------|\n";  
    for (int count = 0; count < columns; count++)
    {
        std::cout << "Enter category (" << count+1 << "/" << columns << "): ";
        std::cin >> categories;
        outputFile << "| " << categories << std::setw(14-categories.size()-1)
                    << "|\n";
    }
    outputFile.close();
    return 0;
}

例子Use/Output

$ ./bin/cout_columns
How many columns do you need in your table? 7
Enter category (1/7): nuts
Enter category (2/7): bolts
Enter category (3/7): screws
Enter category (4/7): nails
Enter category (5/7): staples
Enter category (6/7): pliars
Enter category (7/7): hammer

输出文件

$ cat organize.txt
| Categories |   Monday   |  Tuesday  |  Wednesday  |  Thursday  |   Friday   |
|------------|------------|-----------|-------------|------------|------------|
| nuts       |
| bolts      |
| screws     |
| nails      |
| staples    |
| pliars     |
| hammer     |

这在坚果-shell 是您将处理其余列以调整大小和填充每个列的方式。挑战在于,在开始写入文件之前,您必须拥有每个类别的整周数据,因为没有办法备份并在以后填写它们。

检查一下,如果这就是您想要的或者您有任何问题,请告诉我。