我在C编程,对此感到疑惑。
假设有一个简单的程序:

Username:
Password:


现在...看起来很简单,而且打印都很简单(printf("Username: \nPassword: ");
但是如何获取用户名字符串? fgets当然可以,但是...我希望用户在“ Username:”之后而不是在密码之后键入它。您可以执行printf("\b");删除同一行中以前写入的数据,但是如何到达“用户名:”?删除“ Password:”后,“ \ b”无用,对于回车显然同样如此。我怎么做?

最佳答案

如果是Windows,则可以这样移动光标:

#include <stdio.h>
#include <windows.h>

void setCursorPos(int x, int y)
{
    HANDLE hStdout;
    CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleScreenBufferInfo(hStdout, &csbiInfo);
    csbiInfo.dwCursorPosition.X = x;
    csbiInfo.dwCursorPosition.Y = y;
    SetConsoleCursorPosition(hStdout, csbiInfo.dwCursorPosition);
}

int _tmain(int argc, _TCHAR* argv[])
{
    system("cls");
    char user[128], pass[128];
    printf("Username:\r\nPassword:\r\n");
    setCursorPos(10, 0);
    fgets(user, 128, stdin);
    setCursorPos(10, 1);
    fgets(pass, 128, stdin);
    printf("User = %s, Pass = %s\r\n", user, pass);
    return 0;
}

关于c - 如何删除C中上述各行中的书面文本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21661866/

10-13 01:38