Как постоянно мигать определенным текстом во время ввода и вывода?

Вот мой код, который мигает "Добро пожаловать" после того, как пользователь вводит свое имя.

"Добро пожаловать" не мигает, когда пользователь пишет свое имя. Когда пользователь нажимает 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 ");

вот и все. У меня не было времени, чтобы прочитать ваш полный вопрос и программу. Также я просто новичок. Поэтому я надеюсь, что это поможет вам и другим.

Другие вопросы по тегам