Как постоянно мигать определенным текстом во время ввода и вывода?
Вот мой код, который мигает "Добро пожаловать" после того, как пользователь вводит свое имя.
"Добро пожаловать" не мигает, когда пользователь пишет свое имя. Когда пользователь нажимает Enter, каретка входит в цикл while. Затем позиция каретки возвращается к координатам "Добро пожаловать" и печатается "Добро пожаловать" с 5 цветами снова и снова, поэтому кажется, что "Добро" мигает.
Но я хочу, чтобы "Добро пожаловать" непрерывно мигало при запуске программы.
Поэтому, скорее всего, этот вопрос также задают - можем ли мы иметь две каретки / курсора одновременно?
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
int main(int argc, char** argv)
{
int x,y,i;char name[10];
textcolor(10);
x=wherex();y=wherey(); //corrdinates of caret will be stored in x & y.
cout<<"\t\t\t\tWelcome\n";
textcolor(15);
cout<<"\nEnter your name\n";
gets(name);
while(1)
{
for(i=10;i<15;i++)
{
textcolor(i);
gotoxy(x,y); //Transferring caret to the coordinates stored in x & y.
cout<<"\t\t\t\tWelcome";
Sleep(300);
}
}
return 0;
}
3 ответа
Я написал небольшой код для этого вопроса, это не 100% правильный ответ. Я просто отправляю этот ответ только для того, чтобы дать немного идеи новичку.
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
int x,y,b,l,n=0;
char c;
void blink()
{
{
int m;
for(m=10;m<15;m++)
{
textcolor(m);
gotoxy(x,y);
cout<<"\t\t\t\tWelcome";
Sleep(60);
}
}
}
int main(int argc, char** argv)
{
char i;int key_stroke;
textcolor(10);
x=wherex();y=wherey();
cout<<"\t\t\t\tWelcome\n";
textcolor(15);
cout<<"\nEnter your name\n";
l=wherex();b=wherey();
z:
{
while (1)
{
if(!(_kbhit()))
{
blink();
goto z;
}
else
{
i=_getch();
if(i==13)
{
gotoxy(l+n,b+1);
return 0;
}
textcolor(10);
gotoxy(l+n,b);
cout<<i;n=n+1;
}
}
}
return 0;
}
Нет, у нас не может быть двух курсоров / курсоров одновременно. Пользователь вводит имя первым.
Он начинает мигать сразу после того, как пользователь нажал клавишу ввода, сначала отобразив текст с заданным цветом и временной задержкой. Затем он устанавливает черный цвет и переписывает текст черным цветом.
Код Windows:
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
void gotoxy(int x, int y);
void setcolor(WORD color);
void clrscr();
int main(int argc, char** argv){
int x,y,i;char name[10];
setcolor(10);
cout<<"Welcome\n";
setcolor(15);
cout<<"\nEnter your name ";
gets(name);
i=0;
x=22;
y=12;
while(1) {
// counter for text color
i++; if (i>15) i=1;
// print colored text
setcolor(i);
gotoxy(x,y);
cout<<"Welcome "<<name;
Sleep(100);
// Print black text to simulate blink
setcolor(0);
gotoxy(x,y);
cout<<" ";
Sleep(100);
}
setcolor(7);
gotoxy(1,24);
return 0;
}
void setcolor(WORD color)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color);
return;
}
void gotoxy(int x, int y)
{
COORD coord;
coord.X = x; coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
return;
}
void clrscr()
{
COORD coordScreen = { 0, 0 };
DWORD cCharsWritten;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD dwConSize;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsole, &csbi);
dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten);
GetConsoleScreenBufferInfo(hConsole, &csbi);
FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
SetConsoleCursorPosition(hConsole, coordScreen);
return;
}
Вместо таких кодов вы можете использовать BLINK в функции textcolor(). Единственная проблема в том, что вы не можете контролировать его скорость. вот и все. в противном случае его легко использовать, и вы также можете установить цвет текста. Например.
цвет текста (красный + моргание); cprintf ( " /t/t WELCOME ");
вот и все. У меня не было времени, чтобы прочитать ваш полный вопрос и программу. Также я просто новичок. Поэтому я надеюсь, что это поможет вам и другим.