当前位置 博文首页 > 广大菜鸟的博客:C++实现window终端非清屏重画的光标上移数行再
如果需求可以清屏
的话,
简单操作:加头文件头文件:stdlib.h,再输入system(“cls”);
光标上移参考资料:
如何取得光标当前位置的句柄(论坛):https://bbs.csdn.net/topics/310037758
控制台光标怎么移至上一行?(论坛):https://bbs.csdn.net/topics/390012308?page=2
尝试:以九宫格的格式动态输出字符串
#include<iostream>
#include<Windows.h>//Sleep调用,vc环境下
//#include <stdio.h> //tc编译器下
using namespace std;
class GraphPrint {
// 随意定位
void Gotoxy(int x, int y)
{
HANDLE hOutput;
COORD loc;
loc.X = x;
loc.Y = y;
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput, loc); return;
}
// 实现光标上移
void CursorUpOneLine() {
CONSOLE_SCREEN_BUFFER_INFO csbi; //控制台屏幕缓冲区信息
COORD coord; //设置屏幕上的坐标
coord.X = 10; //设置光标坐标
coord.Y = 10;
HANDLE hout;
hout = GetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出设备的句柄
GetConsoleScreenBufferInfo(hout, &csbi); //获取屏幕缓冲的光标位置,然后把当前光标位置赋给COORD
coord.X = csbi.dwCursorPosition.X; //得到坐标x的值
coord.Y = csbi.dwCursorPosition.Y; //y值
coord.Y--;
SetConsoleCursorPosition(hout, coord);//定位光标
}
public:
// 打印矩阵图案
void printOneState(char* num) {
for (int j = 0; j < 3; j++)
cout << " -";
cout << endl;
for (int i = 0; i < 3; i++) {
cout << "|";
for (int j = 0; j < 3; j++)
cout << num[i * 3 + j] << "|";
cout << endl;
for (int j = 0; j < 3; j++)
cout << " -";
cout << endl;
}
}
//打印所有的结果
void printStates(char* num[], int length) {
for (int i = 0; i < length; i++) {
printOneState(num[i]);
Sleep(1000);
if (i < length - 1) {
for (int i = 0; i < 7; i++) // 已经知道有7行需要被覆盖掉
CursorUpOneLine();
}
}
}
};
int main() {
char* num[] = { (char*)"123456780",(char*)"012345678",(char*)"123456708"};
GraphPrint g;
g.printStates(num, sizeof(num) / sizeof(char*));
}