在考试中遇到了有关C ++中元素闪烁的问题
问题是 “在C ++中打印一个星形图案,并且图案奇数行中偶数位置上的每个星星都必须闪烁”
我已经有了“星型”的代码,也可以在所需位置上标识“元素”,但是我不知道如何使它们闪烁。
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
void oddline(int* i)
{
for(int j=0;j<=i;j++)
{
if(j%2==0)
{ cout<<"*"; }
else{
cout<<"*";//These are the positions which are required to blink.
}
}
int main()
{
for(int i=0;i<10;i++)
{
if(i%2==0)
oddline(&i);
else
for(int j=0;j<=i;j++)
{ cout<<"*";
}
cout<<endl;
}
}
}
有什么办法让它们闪烁?
答案 0 :(得分:1)
您需要指定正在打印星星的每一行的屏幕坐标。使用计时器清除并重新打印行以获得所需的闪烁效果。
包括windows.h
并使用SetConsoleCursorPosition()
设置文本的x-y坐标。这仅适用于Windows平台。
在VC ++中尝试这样的事情:
#include<chrono>
#include<thread>
#include<iostream>
#include <windows.h>
void gotoxy(int x, int y)
{
COORD coordinate;
coordinate.X = x;
coordinate.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coordinate);
}
void oddline(int i, bool clear)
{
for (int j = 0; j <= i; j++)
{
if (j % 2 == 0) {
std::cout << "*";
}
else {
std::cout << (clear? " ": "X");
}
}
}
void printStars(bool clear = false)
{
gotoxy(0, 5);
for (int i = 0; i < 10; i++){
if (i % 2 == 0) {
oddline(i,clear);
}
else
for (int j = 0; j <= i; j++)
{
std::cout << "*";
}
std::cout << std::endl;
}
}
int main()
{
int count = 0;
while (count < 50)
{
printStars(); // redraw all stars ( draw only target starts for perf)
std::this_thread::sleep_for(std::chrono::milliseconds(300));
printStars(true); // erase target stars
std::this_thread::sleep_for(std::chrono::milliseconds(300));
count ++;
}
return 0;
}
已编辑
为避免线程和计时(仅适用于新手),将sleep_for行替换为delay():
void delay()
{
int m = 1000; //adjust
int n = 3200; //adjust
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
// do nothing
}
}
}