首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么删除Consule中已经显示的字符

2012-04-07 
如何删除Consule中已经显示的字符C/C++ code#include iostream#include stdlib.h#include stdio.h#i

如何删除Consule中已经显示的字符

C/C++ code
#include <iostream>#include <stdlib.h>#include <stdio.h>#include <conio.h>#include <windows.h>#include <string>using namespace std;int main(){    int noInput=0;    char c;    string a;    for (int i=0;i<1000;i++)    {        if (noInput>500)        {            cout<<endl<<"走神儿了吧~~"<<endl;            break;        }        Sleep(10);        if (kbhit())        {            c=getch();            if (c=='\r')                break;            else if (c=='\b')            {                                //【定位光标,不会做】                                clreol();//编译出错,找不到标示符                a.pop_back();                    noInput=0;                i=0;            }            else            {                a.push_back(c);                cout<<c;                noInput=0;                i=0;            }        }        else        {            noInput++;        }    }    cout<<endl<<a<<endl;    system("pause");}


以上程序是为了实现限制一个输入的时间,每输入一个字母后必须在5秒内输入下一个。
现在删除字符是问题,实际上在后台已经实现,但屏幕上已显示的内容不能删除。
Turbo C有一个几个函数的组合可以实现相关功能,但VC不支持。

怎样在VC下实现删除屏幕上指定位置的已经显示的字符。

[解决办法]
同一行内可以用cprintf("\b");
不同行的话参考下面:
C/C++ code
#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 cursorvoid 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 outputvoid 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 cursorvoid HideTheCursor(){   CONSOLE_CURSOR_INFO cciCursor;   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);   if(GetConsoleCursorInfo(hStdOut, &cciCursor))   {      cciCursor.bVisible = FALSE;      SetConsoleCursorInfo(hStdOut, &cciCursor);   }}//Shows the console cursorvoid ShowTheCursor(){   CONSOLE_CURSOR_INFO cciCursor;   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);   if(GetConsoleCursorInfo(hStdOut, &cciCursor))   {      cciCursor.bVisible = TRUE;      SetConsoleCursorInfo(hStdOut, &cciCursor);   }} 

热点排行