当被一个输入分开时,有两个控制台输出同时显示

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

本文关键字:显示 两个 输出 控制台 一个 输入      更新时间:2023-10-16

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

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

我希望它类似于web登录页面,但在c++控制台应用程序窗口中。

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文档中摘录,如果您想进一步了解它们的库函数,请参阅此链接。您可以获得一些方便的函数,这些函数可以帮助您使用ncurses之类的东西遍历控制台。没有普通C++那么有创意,但这取决于你是否希望将来从像它这样的库中获得更多功能。

这里有一个基本实现,不使用任何库,只使用在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;
}