我正在尝试在 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 个字符的总宽度。
因为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;
}
例子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 是您将处理其余列以调整大小和填充每个列的方式。挑战在于,在开始写入文件之前,您必须拥有每个类别的整周数据,因为没有办法备份并在以后填写它们。
检查一下,如果这就是您想要的或者您有任何问题,请告诉我。
在 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 个字符的总宽度。
因为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;
}
例子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 是您将处理其余列以调整大小和填充每个列的方式。挑战在于,在开始写入文件之前,您必须拥有每个类别的整周数据,因为没有办法备份并在以后填写它们。
检查一下,如果这就是您想要的或者您有任何问题,请告诉我。