我正在用C ++编写一个程序,将一些文本输出到控制台。但是,这个文本通常很长,但我需要它在一行。程序只是转到下一行并写入那里,而不是继续在同一行上写入。
有没有办法让程序写入同一行,并添加一个水平滚动条,以便我可以看到它?
例如,以下代码在多行上输出字母a。
#include <iostream>
using namespace std;
int main() {
for (int n = 0; n < 1000; n++) {
cout << "a";
}
}
有没有办法让所有“a”在同一条线上输出?显然这不适合控制台屏幕。那么,如何添加水平滚动条来查看全部内容呢?
答案 0 :(得分:1)
此问题是特定于操作系统的,无法使用标准C ++解决。正如您在评论中声明您使用的是Windows,您需要查看Microsoft提供的文档。
以下是与控制台交互的功能列表:https://docs.microsoft.com/en-us/windows/console/console-functions
您感兴趣的是
BOOL WINAPI SetConsoleScreenBufferSize(
_In_ HANDLE hConsoleOutput,
_In_ COORD dwSize
);
如果您不知道控制台屏幕缓冲区是什么,那么Micrososft会比我更好地解释它,所以这里是:https://docs.microsoft.com/en-us/windows/console/console-screen-buffers enter link description here
对您而言,重要的部分是控制台屏幕缓冲区是一个二维数组。更改数组大小,然后更改行的长度。
编辑0: 下面是我使用Visual Studio 2017和C ++在最新的Windows 10内部构建下编写的示例代码。
执行SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE),coordinates)
后,所有内容都在一行上,并且有一个滚动条。但是存在一个问题:此解决方案仅在用户未调整控制台大小时才有效。一旦用户调整窗口大小,一切都和以前一样。通过深入了解Microsoft的文档可能会解决这个问题。 Haven还没有机会这样做。
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
int main()
{
for (short int i = 0; i < 1000; i++)
{
cout << "a";
}
cout << endl;
_COORD coordinates;
coordinates.X = 1000;
coordinates.Y = 1000;
if (0 == SetConsoleScreenBufferSize(
GetStdHandle(STD_OUTPUT_HANDLE),
coordinates
))
{
return -1;
}
for (short int i = 0; i < 1000; i++)
{
cout << "b";
}
cout << endl;
return 0;
}
以下代码并非严格要求:
for (short int i = 0; i < 1000; i++)
{
cout << "b";
}
Windows将重新格式化重新调整缓冲区之前已打印的内容。
答案 1 :(得分:0)
使用SetConsoleScreenBufferSize
或SetConsoleScreenBufferInfoEx
函数在写入之前更改控制台缓冲区的大小。