VS2019 输出 Window 带有大量空格

VS2019 Output Window Comes with lot of whitespace

我认为以前没有人问过这个问题,但在这里:

当我 运行 我在 VS2019 中的程序时,输出 window 正确执行,具体取决于错误。

但这次我正在创建一个程序,它取决于全屏控制台输出 window 列和行的长度。

但我注意到列数多于行数,因为输出 window.

附带了额外的空格

我修改了我的代码作为示例:

#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;

int main() {
    SetConsoleDisplayMode(GetStdHandle(STD_OUTPUT_HANDLE), CONSOLE_FULLSCREEN_MODE, 0);
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    int WindowColumns, WindowRows, DisplayBuffer, DisplayColumns, DisplayRows;
    string DisplayMap;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
    WindowColumns = csbi.srWindow.Right - csbi.srWindow.Left + 1;
    WindowRows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1;
    
    return 0;
}

这是输出:

237,67

以上输出首先显示列,然后显示行。我对此很确定。列数多于行数,应该是相反的,考虑到我的屏幕分辨率是1920x1080

显示输出中生成的空白量的屏幕截图:

I dont have enough reputation to embed the image, so here's a link

我的问题是:如何去掉这个额外的空格,它应该只匹配行和列的长度。 你能帮我解决这个问题吗?

提前致谢。

我建议您可以尝试使用 SMALL_RECT structure 来指定控制台屏幕缓冲区。

我建议您可以遵循以下代码:

#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;

int main() {
    SetConsoleDisplayMode(GetStdHandle(STD_OUTPUT_HANDLE), CONSOLE_FULLSCREEN_MODE, 0);
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    int WindowColumns, WindowRows, DisplayBuffer, DisplayColumns, DisplayRows;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
    SMALL_RECT rect = csbi.srWindow;
    COORD size = { rect.Right + 1,rect.Bottom + 1 };
    SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), size);//Changes the size of the specified console screen buffer.
    WindowColumns = csbi.srWindow.Right - csbi.srWindow.Left + 1;
    WindowRows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1;

    return 0;
}

这听起来可能很奇怪,但请尝试在 cmd -> 属性 -> 布局中检查控制台的大小。如果您修改这些值并再次 运行,您的程序会发生什么情况?