如何在控制台的中间显示 HELL WORDL! 的字符串 ?
一 显示效果:
二代码
#include <stdio.h>
#include <windows.h>
#include<string>
using namespace std;
#define LINE 12 //控制台的13行(第一行为0,第二行为1)
#define COLUNM 35 //控制台的36列(第一列为0,第二列为1)
void main()
{
HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台输入句柄
CHAR_INFO CharInfo;
int i = 0;
string str = "HELLO WORLD!";
CHAR_INFO charInfoAarray[80 * 25];//缓存区大小(即控制台的大小25行80列)
COORD dwBufferSize = { 80, 25 };//固定值(控制台窗口固定的属性值)
COORD dwBufferCoord = { COLUNM, LINE };//缓冲区左上角的起始位置
SMALL_RECT rect = { COLUNM, LINE, COLUNM + 11, LINE };//显示多大的缓冲区: 大小是一个矩形(11 等于 字符串长度 减 1)
CharInfo.Attributes = FOREGROUND_RED | BACKGROUND_GREEN;//前景色为红色,背景色为绿色
for (i = 0; i<str.length(); i++)
{
CharInfo.Char.AsciiChar = str[i];//从字符串里将每个字符取出来
charInfoAarray[80 * LINE + (COLUNM + i)] = CharInfo;//80是每行最多显示的字符个数(即80列)
}
WriteConsoleOutput(hConsoleOutput, charInfoAarray, dwBufferSize, dwBufferCoord, &rect);
getchar();
}
三 常见问题
1 什么是控制台的中间?
控制台默认大小是80列25行。因此从控制台的13行36列的位置开始显示字符串。
2 为什么同样的代码运行后我的程序无法显示出"HELLO WORD"?
需要在vs里将字符集设置成多字节字符集,如下图设置: