目录
1.1 system
设置控制台属性其实我们可以采用"win+R" 输入"cmd" 进入控制台修改
然后"mode con cols=100 lines=30"设置30行100列
写程序的时候一般是用编译器,其实我们还可以用C语言中的库函数system
首先我们得把默认终端应用程序改一下否者编译时达不到我们想要的结果
保存退出后默认是黑色的框,可以根据自己的喜好设置背景颜色
int system( const char* command );
调用命令处理器以执行命令
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
//设置控制台相关属性
system("mode con cols=30 lines=30");
return 0;
}
效果是一样的
1.2 title
title命令用于修改控制台cmd窗口
system("title 贪吃蛇");
1.3 COORD
小黑框也是有坐标的概念,为了我们后续游戏的进行,COORD是windows API中定义的一个结构体,表示一个字符在控制台屏幕缓冲区上的坐标,坐标系(0,0)的原点位于缓冲区的顶部左侧单元格
语法
typedef struct _COORD{
SHORT X:
SHORT Y:}COORD,*PCOORD;
//定义一个坐标为(x,y)的结构体名字为COORD
int main()
{//定位光标
COORD pos = { 10,20 };
return 0;
}
- X表示水平坐标
- Y表示纵坐标
1.4GetStdHandle
GetStdHandle是一个Windows API函数,他用于从一个特定的标准设备(标准输入,标准输出错误)中取得一个句柄(用来标识不同设备的数值),使用这个句柄可以操作设备。
HANDLE WINAPI GetStdHandle(_In_ DWORD nStdHandle);
//获得键盘鼠标等的句柄
- nStdHandle标准设备
- HANDLE 是一种指针
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
int main()
{
//设置控制台相关属性
HANDLE houtput =NULL;
houtput = GetSpoolFileHandle(STD_OUTPUT_HANDLE);
return 0;
}
1.5GetConsoleCursorInFo
检索有关指定控制台屏幕缓冲区的游标大小和可见性的信息。
typedef struct _CONSOLE_CURSOR_INFO{
DWORD dwSize;
BOLL bVisible;
}CONSOLE_CURSOR_INFO,*PCONSOLE_CURSOR_INFO;
- bVisible ,游标的可见性,如果可见则该成员为TURE
- dwSize光标填充的字符单元百分比,此值结余1-100光标外观会变化,范围为单元底部的水平线到完全填充
#include<stdlib.h>
#include<Windows.h>
int main()
{
//设置控制台相关属性
HANDLE houtput =NULL;
houtput = GetSpoolFileHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cursor_info = { 0 };
GetConsoleCursorInfo(houtput,&cursor_info);
return 0;
};
1.6 SetConsoleCursorInfo
设置控制台屏幕缓冲区的光标的大小和可见性
原型
BOOL WINAPI SetConsoleCursorInfo{
HANDLE hConsoleOutput,const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo
};
1.7SetConsoleCursorPosition
定位光标的位置
BOOL WINAPI SetConsoleCursorPosition{
_In_HANDLE hConsoleOutput,//句柄
_In_ COORD dwCursorPosition //坐标
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<stdbool.h>
int main()
{
//获得输出设备的句柄
HANDLE houtput = NULL;
houtput = GetStdHandle(STD_OUTPUT_HANDLE);
//定位光标的位置
COORD pos = { 10,20 };
SetConsoleCursorPosition(houtput, pos);
return 0;
}
可以让我在屏幕上的任何位置打印信息
1.8GetAsyncKeyState
获取键盘按键情况返回值为short类型,1表示按过0表示没按过
SHORT GetAsyncKeyState
{
int Vkey;};
综上,我们可以用以上函数来设置控制台基本属性
1.9setlocale
setlocale 函数用于修改当前地区,第LC_ALL 第二个参数为"C"正常模式和""本地化模式
setlocale(LC_ALL,"C");
//c语言为默认模式,库函数按正常的方式执行
setlocale(LC_ALL,"")
//切换到本地化,支持宽字符等的输出
- setlocale也可以来查询当前地区,第二个参数置为空就可以了
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<stdbool.h>
#include <locale.h>
int main()
{
char* ret = setlocale(LC_ALL, NULL);
printf("%s\n", ret);
ret = setlocale(LC_ALL, "");
printf("%s\n", ret);
return 0;
}
1.10宽字符的打印
wchar_t ch=L'我';
wprintf(L"%lc\n",ch);
- 宽字符的字面量必须加上前缀L,否则C语言会把字面量当窄字面量处理,前缀L在单引号前面表示宽字符
- 宽字符使用wprintf,对应wprintf()的占位符为%lc
- 在双引号前面,表示宽字符,对应的wprintf()的占位符为%ls