1

这是我的代码,在用户输入他的名字后会闪烁“欢迎”。

当用户写他的名字时,“欢迎”不会闪烁。当用户按 Enter 键时,插入符号进入 while 循环。然后插入符号位置设置回“欢迎”的坐标,cout 再次用 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;
 }
4

3 回答 3

4

我为这个问题写了一个小代码,它不是 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;
}
于 2015-11-13T19:33:15.090 回答
2

不,我们不能同时有两个插入符号/光标。用户首先输入姓名。

它在用户按下回车键后立即开始闪烁,首先以给定的颜色和时间延迟显示文本。然后将颜色设置为黑色并用黑色覆盖文本。

窗口代码:

#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;
}
于 2015-07-07T20:24:38.337 回答
1

您可以在 textcolor() 函数中使用 BLINK 而不是此类代码。唯一的问题是你无法控制它的速度。而已。否则它易于使用,您还可以设置文本颜色。例如。

文字颜色(红色+闪烁);cprintf("/t/t 欢迎");

而已。我没有时间阅读您的完整问题和程序。我也只是一个新手。所以我希望这对你和其他人有帮助。

于 2016-11-04T15:42:38.100 回答