Я пытаюсь создать таблицу в C ++, но строки, разделяющие столбцы, не совпадают - PullRequest
0 голосов
/ 29 сентября 2019

В C ++ я работаю над кодом, который создает таблицу в TXT-файле для организации денег, и у меня возникла проблема, когда строки, разделяющие столбцы, не совпадают, если вы не укажете точно 10цифры / буквы в поле.Любые идеи о том, как это исправить?

Вот скриншот того, что проблема enter image description here

Вот мой код:

#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 букв / цифр, предоставляя при этом пустое пространство для заполнения области, если они использовали менее 10 символов.

1 Ответ

1 голос
/ 29 сентября 2019

Хотя не совсем ясно, как вы намереваетесь заполнить столбцы Monday - Friday, причем ваши столбцы "Categories" являются первыми, вы можете использовать std::setw(), чтобы убедиться, что столбец заполнен правильно.Глядя на столбец "Categories", содержащий не более 10 символов, с двумя пробелами (по одному на каждой стороне) и 2- |(по одному на каждой стороне) у вас есть общая ширина для 14-символьных символов.

Поскольку categories равно std::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;
}

Пример использования / Вывод

$ ./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     |

Эта оболочка в виде гайки - это то, как вы будете обрабатывать оставшиеся столбцы для их размера и заполнения каждого.Сложность в том, что вам придется иметь полные недели данных для каждой из категорий, прежде чем вы начнете записывать в файл, потому что нет способа создать резервную копию и заполнить их позже.

Просмотрите вещии дайте мне знать, если это то, что вы были после или у вас есть какие-либо вопросы.

...