user-0 提问: 求大神帮助。 

回复:
user: user-0
content: /* 自己慢慢写了。 写得不好。 大家以后提出建议哟！！ 开始时间：2015年6月19日 完成时间：2015年6月20日 程序目的：编写一个字母连连看游戏 */ #include <stdio.h> #include <stdlib.h> #include <time.h>  void random_order(char *,int); void show (); void display(char *,int); void main () {     char totall_letters[]="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";     char generate_letters[5]={0}, double_letters[10]={0}, letters[3][3];     int i,j,m,num1,num2,num=1;     show ();  //显示游戏规则     srand((unsigned)time(NULL));//随机字母生成     for (i=0;i<5;i++)     {          m=rand()%52;          generate_letters[i]=totall_letters[m];     }     loop:          {          srand((unsigned)time(NULL));//随机字母生成          for (i=0;i<5;i++)          {               m=rand()%52;               generate_letters[i]=totall_letters[m];          }          }          for (i=0;i<4;i++) //判断随机生成的字母中否有重复的字母          {             for (m=i+1;m<5;m++)             {                  if (generate_letters[m]==generate_letters[i])                     goto loop;             }          }     for (i=0;i<5;i++)//将随机获得的字母进行加倍     {         double_letters[i]=generate_letters[i];         m=9-i;         double_letters[m]=generate_letters[i];     }     random_order(double_letters,10);  //打乱数组排序     display(double_letters,10);  //显示字母排序     while (num<5)  //对输入的次数进行判断同时判断结果    {        while(1)  //提示输入位置并判断位置是否符合规则        {          printf("请输入需要消除的字母所在位置\n");          printf("      字母1：");          scanf ("%d",&num1);          printf("      字母2：");          scanf ("%d",&num2);          if (num1<10&&num2<10&&num1>0&&num2>0)          {              break;          }        }     if (double_letters[num1-1]==double_letters[num2-1])  //比较两个字母是否相等     {         double_letters[num1-1]='@';         double_letters[num2-1]='@';         display(double_letters,10);         num++;     }     else     {         printf("\n\n/  (ㄒoㄒ)/~~智商有待提高  ！！游戏结束！！\n\n");         return ;     }     }     printf("\n\n   O(∩_∩)O~~ 真聪敏  ！！恭喜闯关通过！！\n\n");     return ; }  void random_order(char *name,int length) {     char t;     int i,j; 	int cleartimes = 10;     while (cleartimes--)     {         i = rand()%length; 		j = rand()%length;         if (i==j) 			continue;         t=name[i];         name[i]=name[j];         name[j]=t;     } }  void show()    //显示游戏规则 {     printf("*******************************************\n");     printf("* 游戏讲解及规则:                         *\n");     printf("*     游戏运行后会在桌面上随机产生9个字母 *\n");     printf("*其中有8个字母是两两相同的。如果想消去两个*\n");     printf("*相同的字母，你必须在键盘上按对这个两个相 *\n");     printf("*字母所处的位置。如果你按到不成对的字母所 *\n");     printf("*在的位置，游戏结束。若4对成功消除，则闯关*\n");     printf("*通过！                                   *\n");     printf("*    注：字母所在位置是按行计数的。       *\n");     printf("*******************************************\n"); } void display(char *double_letters,int length) //显示字母排序 {     printf("\n*******************************************\n");     printf("游戏显示：\n");     printf(" *            %c   %c   %c                  *\n",double_letters[0],double_letters[1],double_letters[2]);     printf(" *            %c   %c   %c                  *\n",double_letters[3],double_letters[4],double_letters[5]);     printf(" *            %c   %c   %c                  *\n",double_letters[6],double_letters[7],double_letters[8]);     printf("\n*******************************************\n"); }

user: user-1
content: 仅供参考：#include <windows.h> #include <stdio.h>  void ConPrint(char *CharBuffer, int len); void ConPrintAt(int x, int y, char *CharBuffer, int len); void gotoXY(int x, int y); void ClearConsole(void); void ClearConsoleToColors(int ForgC, int BackC); void SetColorAndBackground(int ForgC, int BackC); void SetColor(int ForgC); void HideTheCursor(void); void ShowTheCursor(void);  int main(int argc, char* argv[]) {    HideTheCursor();    ClearConsoleToColors(15, 1);    ClearConsole();    gotoXY(1, 1);    SetColor(14);    printf("This is a test...\n");    Sleep(5000);    ShowTheCursor();    SetColorAndBackground(15, 12);    ConPrint("This is also a test...\n", 23);    SetColorAndBackground(1, 7);    ConPrintAt(22, 15, "This is also a test...\n", 23);    gotoXY(0, 24);    SetColorAndBackground(7, 1);    return 0; }  //This will clear the console while setting the forground and //background colors. void ClearConsoleToColors(int ForgC, int BackC) {    WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);    //Get the handle to the current output buffer...    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);    //This is used to reset the carat/cursor to the top left.    COORD coord = {0, 0};    //A return value... indicating how many chars were written    //not used but we need to capture this since it will be    //written anyway (passing NULL causes an access violation).    DWORD count;     //This is a structure containing all of the console info    // it is used here to find the size of the console.    CONSOLE_SCREEN_BUFFER_INFO csbi;    //Here we will set the current color    SetConsoleTextAttribute(hStdOut, wColor);    if(GetConsoleScreenBufferInfo(hStdOut, &csbi))    {       //This fills the buffer with a given character (in this case 32=space).       FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);        FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);       //This will set our cursor position for the next print statement.       SetConsoleCursorPosition(hStdOut, coord);    } }  //This will clear the console. void ClearConsole() {    //Get the handle to the current output buffer...    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);    //This is used to reset the carat/cursor to the top left.    COORD coord = {0, 0};    //A return value... indicating how many chars were written    //   not used but we need to capture this since it will be    //   written anyway (passing NULL causes an access violation).    DWORD count;    //This is a structure containing all of the console info    // it is used here to find the size of the console.    CONSOLE_SCREEN_BUFFER_INFO csbi;    //Here we will set the current color    if(GetConsoleScreenBufferInfo(hStdOut, &csbi))    {       //This fills the buffer with a given character (in this case 32=space).       FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);       FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);       //This will set our cursor position for the next print statement.       SetConsoleCursorPosition(hStdOut, coord);    } }  //This will set the position of the cursor void gotoXY(int x, int y) {    //Initialize the coordinates    COORD coord = {x, y};    //Set the position    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); }  //This will set the forground color for printing in a console window. void SetColor(int ForgC) {    WORD wColor;    //We will need this handle to get the current background attribute    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);    CONSOLE_SCREEN_BUFFER_INFO csbi;     //We use csbi for the wAttributes word.    if(GetConsoleScreenBufferInfo(hStdOut, &csbi))    {       //Mask out all but the background attribute, and add in the forgournd color       wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);       SetConsoleTextAttribute(hStdOut, wColor);    } }  //This will set the forground and background color for printing in a console window. void SetColorAndBackground(int ForgC, int BackC) {    WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);;    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColor); }  //Direct console output void ConPrint(char *CharBuffer, int len) {    DWORD count;    WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), CharBuffer, len, &count, NULL); }  //Direct Console output at a particular coordinate. void ConPrintAt(int x, int y, char *CharBuffer, int len) {    DWORD count;    COORD coord = {x, y};    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);    SetConsoleCursorPosition(hStdOut, coord);    WriteConsole(hStdOut, CharBuffer, len, &count, NULL); }  //Hides the console cursor void HideTheCursor() {    CONSOLE_CURSOR_INFO cciCursor;    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);     if(GetConsoleCursorInfo(hStdOut, &cciCursor))    {       cciCursor.bVisible = FALSE; 	  SetConsoleCursorInfo(hStdOut, &cciCursor);    } }  //Shows the console cursor void ShowTheCursor() {    CONSOLE_CURSOR_INFO cciCursor;    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);     if(GetConsoleCursorInfo(hStdOut, &cciCursor))    {       cciCursor.bVisible = TRUE; 	  SetConsoleCursorInfo(hStdOut, &cciCursor);    } }