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;
}
小结
通过本章的学习,想必你已经学会了快速清除屏幕的方法。
如果这篇文章对你有帮助的话,一定要点个赞哈!