user-0 提问: 再问个scanf的问题

回复:
user: user-1
content: 引用 2 楼 jhams 的回复:这是我项目代码里的一句，是回到打印行的左上角啊，结果确实是这样 啊，为什么我试验的时候不行啊？ 能否给一下，上下文的代码？ 楼上的兄弟NB。 我的试验代码如下。  int main() { 	puts("sdfsafsdfsdf"); 	puts("sdfsafsdfsdf"); 	printf("\033[2J");	// clear and goto 0, 0 	return 0; }  输出结果是： sdfsafsdfsdf sdfsafsdfsdf [2JPress any key to continue

user: user-2
content: \033[2J 相当于 ESC[2J  http://www.termsys.demon.co.uk/vtansi.htm

user: user-0
content: 这是我项目代码里的一句，是回到打印行的左上角啊，结果确实是这样

user: user-1
content: 这个不行啊。 我试验了一下的。 不过移动光标到原点这个有办法的。 printf("\r"); 即可。

user: user-3
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);    } }

user: user-3
content: 搜“ANSI.SYS”  ANSI escape sequences for cursor movement, graphics, and keyboard settings  In the following list of ANSI escape sequences, the abbreviation ESC represents the ASCII escape character 27 (1Bh), which appears at the beginning of each escape sequence.  ESC[PL;PcH     Cursor Position: Moves the cursor to the specified position     (coordinates). If you do not specify a position, the cursor moves to the     home position--the upper-left corner of the screen (line 0, column     0). This escape sequence works the same way as the following Cursor     Position escape sequence.  ESC[PL;Pcf     Cursor Position: Works the same way as the preceding Cursor Position     escape sequence.  ESC[PnA     Cursor Up: Moves the cursor up by the specified number of lines without     changing columns. If the cursor is already on the top line, ANSI.SYS     ignores this sequence.  ESC[PnB     Cursor Down: Moves the cursor down by the specified number of lines     without changing columns. If the cursor is already on the bottom line,     ANSI.SYS ignores this sequence.  ESC[PnC     Cursor Forward: Moves the cursor forward by the specified number of     columns without changing lines. If the cursor is already in the     rightmost column, ANSI.SYS ignores this sequence.  ESC[PnD     Cursor Backward: Moves the cursor back by the specified number of     columns without changing lines. If the cursor is already in the leftmost     column, ANSI.SYS ignores this sequence.  ESC[s     Save Cursor Position: Saves the current cursor position. You can move     the cursor to the saved cursor position by using the Restore Cursor     Position sequence.  ESC[u     Restore Cursor Position: Returns the cursor to the position stored     by the Save Cursor Position sequence.  ESC[2J     Erase Display: Clears the screen and moves the cursor to the home     position (line 0, column 0).  ESC[K     Erase Line: Clears all characters from the cursor position to the     end of the line (including the character at the cursor position). ……