C++ C++;输出中的完全右对齐

C++ C++;输出中的完全右对齐,c++,shell,C++,Shell,我的问题如下:我想在执行时将输出文本与输出shell的右对齐。我不能使用标准的std::setw()和std::right操纵器,因为我希望无论外壳有多大,输出总是在正确的边界上 有没有办法做到这一点?正如@Angew所评论的,输出是一个流,所以它没有完全的权限。要实现此目标,只需先获得外壳的宽度,然后使用setw()和right: CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPU

我的问题如下:我想在执行时将输出文本与输出shell的右对齐。我不能使用标准的
std::setw()
std::right
操纵器,因为我希望无论外壳有多大,输出总是在正确的边界上


有没有办法做到这一点?

正如@Angew所评论的,输出是一个流,所以它没有完全的权限。要实现此目标,只需先获得外壳的宽度,然后使用
setw()
right

CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
int width = csbi.dwSize.X;

string str = "string you want to print";
cout << right << setw(width) << str << endl;
控制台屏幕缓冲区信息csbi;
GetConsoleScreenBufferInfo(GetStdHandle(标准输出句柄)和csbi);
int width=csbi.dwSize.X;
string str=“要打印的字符串”;

谢谢你的回答!最后,我解决了以下问题:

#include <iomanip>
#include <unistd.h>
#include <sys/ioctl.h>

....

struct winsize w;
ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
int column_width = w.ws_col;
cout << setw(column_width) << "Thank you everybody";

....
#包括
#包括
#包括
....
结构winsize w;
ioctl(标准文件号、TIOCGWINSZ和w);
int列的宽度=w.ws列;

从标准C++的角度来看,输出是一个流,因此它没有“完全权限”。您必须查看终端库,例如
ncurses
。您只需首先获得外壳的宽度。