当被输入分隔时,同时显示 2 个控制台输出

Having 2 console outputs show at the same time when separated by an input

我正在尝试用 C++ 创建一个简单的登录页面。目前,在我的程序中,您必须在密码输入可用之前输入用户名。我希望能够同时显示两者并可以选择先输入一个。

cout << "User:  "; cin >> enteruser;
cout << "Pass:  "; cin >> enterpass;

return 0;

我希望它类似于 Web 登录页面,但在 C++ 控制台应用程序中 window。

这是一个基本实现,不使用任何库,只使用 http://ascii-table.com/ansi-escape-sequences.php 中定义的转义序列来设置光标位置。

#include <iostream>
#include <string>
#include <stdio.h>

void cursor_up(int lines)
{
    /* Enter escape sequence */
    printf("%c%c%dA", 0x1b, 0x5b, lines);
}

void cursor_forward(int cols)
{
    /* Enter escape sequence */
    printf("%c%c%dC", 0x1b, 0x5b, cols);
}

int main(int argc, char *argv[])
{
    std::string username;
    std::string passwd;

    std::string user_prompt = "Enter user: "; 
    std::string passwd_prompt = "Enter password: ";

    std::cout << user_prompt << std::endl;
    std::cout << passwd_prompt << std::endl;

    cursor_up(2);
    cursor_forward(user_prompt.length());
    std::cin >> username;

    cursor_forward(passwd_prompt.length());
    std::cin >> passwd;

    return 0;
}

ncurses 方式类似于:

#include <ncurses.h>

char userFieldText = "User: ";
char passFieldText = "Pass: ";
char inputUserName[100];
char inputPass[100];
int rowCount;
int columnCount;

initscr();
getmaxyx(stdscr,rowCount,columnCount);
mvprintw(1,1,"%s",userFieldText);
mvprintw(2,1,"%s",passFieldText);
getstr(inputUserName);          // Get input until enter
getstr(inputPass);          // Get input until enter
endwin();

转述自 ncurses docs,如果您想进一步了解其库函数,请参阅此 link。你会得到一些方便的函数,帮助你使用类似 ncurses 的东西遍历控制台。不像纯 C++ 那样有创意,但取决于您是否希望像它一样从库中获得更多功能。