C++ 刷新屏幕

4 篇文章 1 订阅
2 篇文章 1 订阅

C++ 刷新屏幕

方法一:清除文字,重新打印

使用system函数清除控制台的文本,再重新打印,实现刷新屏幕的效果

system函数就不用多讲了,直接上代码:

#include <bits/stdc++.h>
#include <windows.h>			//Sleep()
using namespace std;

int main() {
	for(int i=1;i<=10;i++) {
		system("cls")
		for(int j=1;j<=i;j++)cout<<" ";
		cout<<"Hello, world"<<endl;
		Sleep(100);
	}
	return 0;
}

运行代码,就可以看到Hello, world的字幕在屏幕上移动,看起来没有什么问题,但是,如果把代码改成这样:

#include <bits/stdc++.h>
#include <windows.h>			//Sleep()
using namespace std;

int main() {
	for(int i=1;i<=10;i++) {
		system("cls");
		for(int k=1;k<=10;k++) {
			for(int j=1;j<=i;j++)cout<<" ";
			cout<<"Hello, world"<<endl;
		}
		Sleep(100);
	}
	return 0;
}

运行代码,文本清除时的闪烁清晰可见,除非你电脑的性能特别好,不然看着真的很难受,我们不得不换一个方法。

方法二:直接覆盖原来的文本

清除屏幕行不通,那就索性不清除了。

有经验的人肯定知道,控制台里的退格是没有插入模式的,这就意味着我们可以用需要打印的文本覆盖没有用的文本。

我们首先要将光标移动到控制台左上角,也就是第一行第一列,这里我们写一个gotoxy函数,用来移动光标,详见 C++ 移动光标

void gotoxy(int x, int y) {
	COORD pos = {x,y};
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hOut, pos);
}

记得加上头文件:

#include <windows.h>

然后,就可以开始打印文字了,用本次打印的文本覆盖之前打印的文本。
这里贴上代码:

#include <bits/stdc++.h>
#include <windows.h>
using namespace std;

void gotoxy(int x, int y) {					//移动光标
	COORD pos = {x,y};
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hOut, pos);
}

int main() {
	for(int i=1;i<=10;i++) {
		gotoxy(0,0);						//将光标移动至控制台左上角
		for(int k=1;k<=10;k++) {
			for(int j=1;j<=i;j++)cout<<" ";
			cout<<"Hello, world"<<endl;
		}
		Sleep(100);
	}
	return 0;
}

运行代码,闪烁终于没有了,这表明我们成功了。

拓展:局部刷新

也许你会觉得这样的刷新速度太慢了,你可以尝试使用局部刷新。

所谓局部刷新,就是指将需要清除的部分清除,不需要清除的保留,从而起到加快速度的效果。

我们来观察一下,每次打印时都会将Hello, world向后移动一格。所以,需要清除的部分其实就是在Hello, world前面的那一个字符(其它字符都会被Hello, world覆盖),也就是H。我们就将H清除掉就行了。

贴上完整代码:

#include <bits/stdc++.h>
#include <windows.h>
using namespace std;

void gotoxy(int x, int y) {					//移动光标
	COORD pos = {x,y};
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hOut, pos);
}

int main() {
	for(int i=1;i<=10;i++) {
		for(int k=1;k<=10;k++) {
			gotoxy(i-1,k-1);				//将光标移至第k行,第i列
			cout<<"Hello, world";
			if(i>1) {						//i大于1时做,不然坐标会变成负数
				gotoxy(i-2,k-1);			//将光标移至前一个字符
				cout<<' ';					//清除那个字符
			}
		}
		Sleep(100);
	}
	return 0;
}
小结

通过本章的学习,想必你已经学会了快速清除屏幕的方法。
如果这篇文章对你有帮助的话,一定要点个赞哈!

  • 33
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值