当前位置 博文首页 > 广大菜鸟的博客:C++实现window终端非清屏重画的光标上移数行再

    广大菜鸟的博客:C++实现window终端非清屏重画的光标上移数行再

    作者:[db:作者] 时间:2021-09-16 22:25

    如果需求可以清屏的话,
    简单操作:加头文件头文件: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*));
    }
    

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    cs