我想用C ++输出整个格式化的控制台行(80个字符)。
它应该像这样:
Some things on the left side some other on the right side
数据包含两个返回std :: string和固定文本的迭代器函数。像这样:
std::cout << (*some_iterator)->getID() << " some text:" << LOTSOFSPACES << (*some_other_iterator)->getName() << " some more text.";
结果应始终为80个字符。
我尝试弄乱std :: setw和std :: setfill,std :: left和std :: right,使用stringstream并计算必须创建的空间。但是什么都没有真正起作用,大多数想法只是完全破坏了输出。
有什么想法吗?不幸的是,我不允许使用外部库。
答案 0 :(得分:2)
如果您可以确定两个部分始终少于40个字符(或者可以用其他任何方式将它们分成两列),则可以这样做:
std::string firstPart = (*some_iterator)->getID() + " some text:";
std::string secondPart = (*some_other_iterator)->getName() + " some more text.";
std::cout << std::setw(40) << std::left << firstPart
<< std::setw(40) << std::right << secondPart;
更通用的解决方案是简单地计算字符串之间的间距并手动插入。这不需要具有已知长度的列:
std::string firstPart = (*some_iterator)->getID() + " some text:";
std::string secondPart = (*some_other_iterator)->getName() + " some more text.";
std::size_t spacingSize = 80 - firstPart.length() - secondPart.length();
//Add some code to check if spacingSize is not negative!
std::cout << firstPart << std::string(spacingSize, ' ') << secondPart;
答案 1 :(得分:0)
您可以尝试将光标设置在该位置。 首先,您必须添加库:
#include <windows.h>
现在您可以使用功能:
COORD c;
c.X = x_coordinate;
c.Y = y_coordinate;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);