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 -> 属性 -> 布局中检查控制台的大小。如果您修改这些值并再次 运行,您的程序会发生什么情况?
我认为以前没有人问过这个问题,但在这里:
当我 运行 我在 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 -> 属性 -> 布局中检查控制台的大小。如果您修改这些值并再次 运行,您的程序会发生什么情况?