您可以在链接的文章中查看如何在不同的操作系统上执行任务。在其中,您将找到与如何在 Windows 和 linux 中禁用键盘回显相关的示例源代码,因此您可以使用如下块来实现您的目的:
#ifdef __linux__
/* Implementación en linux */
#elif _WIN32
/* Implementación en windows */
#else
/* Implementación para otros sistemas operativos o error */
#endif
#include <iostream>
#include <string>
int main()
{
std::cout << "Pulse una tecla para continuar";
/* Desactivamos el eco */
SetStdinEcho(false);
/* Solicitamos la entrada de una cadena hasta pulsar enter */
std::string buffer;
std::cin >> buffer;
/* Reactivamos el eco */
SetStdinEcho(true);
std::cout << std::endl;
return 0;
}
#include <string>
#include <curses.h>
using namespace std;
int main()
{
/* Habilitamos curses (ncurses/pdcurses) */
initscr();
printw("Pulse todo lo que quiera ahora...");
/* Deshabilitamos el eco de pulsaciones del teclado */
noecho();
/* Esperamos hasta recibir un retorno del carro o 256 caracteres */
char buffer[256];
/* También podríamos usar getch() para esperar una única pulsación */
getnstr(buffer, sizeof(buffer));
/* Habilitamos el eco de pulsaciones del teclado */
echo();
/* Finalizamos el uso de curses (ncurses/pdcurses) */
endwin();
return 0;
}
//Líneas de código
//Lo que viene a continuación es para indicarle al usuario como salir del programa
cin.ignore();
cout << "Presione la tecla Enter para salir del programa."; //puedes cambiar tu mensaje
cin.get();
return 0;
现在,关于函数system("cls),不幸的是,C++ 中没有函数可以让你“清理”屏幕。如果我没记错的话,我知道 C++ 的创建是为了在不同平台上以最通用的方式使用,其中许多平台甚至没有屏幕或类似的东西。如果可以实现负责清洁屏幕的功能,则该功能必须依赖于操作系统,因此它是不可移植的。
根据我的阅读,如果您使用 Unix 派生的操作系统,您可以使用ncurses具有清洁屏幕功能的库。在 Windows 的情况下,您可以使用 library pdcurses,它类似于 library ncurses(我想指出我没有使用过这样的库,所以我不能保证任何超出我所读内容的内容)。但是,正如我上面所写,此类解决方案取决于操作系统。
可以在 Windows 上清洁屏幕的另一种方法是模拟system("cls"). 这是代码(我从这里得到的):
void clear_screen()
{
DWORD n; /* Number of characters written */
DWORD size; /* number of visible characters */
COORD coord = {0}; /* Top left screen position */
CONSOLE_SCREEN_BUFFER_INFO csbi;
/* Get a handle to the console */
HANDLE h = GetStdHandle ( STD_OUTPUT_HANDLE );
GetConsoleScreenBufferInfo ( h, &csbi );
/* Find the number of characters to overwrite */
size = csbi.dwSize.X * csbi.dwSize.Y;
/* Overwrite the screen buffer with whitespace */
FillConsoleOutputCharacter ( h, TEXT ( ' ' ), size, coord, &n );
GetConsoleScreenBufferInfo ( h, &csbi );
FillConsoleOutputAttribute ( h, csbi.wAttributes, size, coord, &n );
/* Reset the cursor to the top left position */
SetConsoleCursorPosition ( h, coord );
}
问题的解释
终端处理因平台而异,因此需要使用组
#ifdef
来根据编译应用程序的平台来区分实现。基于块的解决方案
#ifdef
您可以在链接的文章中查看如何在不同的操作系统上执行任务。在其中,您将找到与如何在 Windows 和 linux 中禁用键盘回显相关的示例源代码,因此您可以使用如下块来实现您的目的:
示例(从this other stackoverflow answer获得):
使用示例:
基于
curses
(ncurses
/pdcurses
)的解决方案最后,您可以使用
ncurses
orpdcurses
(另一种跨平台替代方案)来完成工作:在示例中,我
getnstr()
用来获取任何组合键,直到找到回车符,例如getch()
. 您可以使用逐键读取的功能,但在我看来,这对于示例来说是最快的。最后,您想要的工作由分别禁用和启用击键回声的
noecho()
和函数完成。echo()
虽然我不是 C++ 方面的专家(或任何类似的专家),但我将用我所知道的一点点来回答你的问题,因为当时我对使用
system("pause")
and函数也有类似的担忧system("cls")
。首先,关于功能,
system("pause")
您可以使用功能cin.get()
,它基本上允许您读取从键盘输入的字符(有关更准确的信息,您可以查看以下链接)。使用它的方式类似于用户 akko 在另一个答案中给出的示例。或者您也可以结合以下方式使用它
cin.ignore()
:现在,关于函数
system("cls)
,不幸的是,C++ 中没有函数可以让你“清理”屏幕。如果我没记错的话,我知道 C++ 的创建是为了在不同平台上以最通用的方式使用,其中许多平台甚至没有屏幕或类似的东西。如果可以实现负责清洁屏幕的功能,则该功能必须依赖于操作系统,因此它是不可移植的。根据我的阅读,如果您使用 Unix 派生的操作系统,您可以使用
ncurses
具有清洁屏幕功能的库。在 Windows 的情况下,您可以使用 librarypdcurses
,它类似于 libraryncurses
(我想指出我没有使用过这样的库,所以我不能保证任何超出我所读内容的内容)。但是,正如我上面所写,此类解决方案取决于操作系统。可以在 Windows 上清洁屏幕的另一种方法是模拟
system("cls")
. 这是代码(我从这里得到的):我自己测试过,效果很好。
作为替代
system("pause")
,您可以执行以下操作。