我正在使用do while
非常简单的方法制作选项菜单,但是在观看了一些视频之后,我决定尝试所谓的“带箭头的选项菜单”,其中有一个形状的箭头==>
指向菜单中的每个选项和使用键盘上的箭头键滚动。
在视频中,我看到了库conio.h
或使用了变体conio2.h
。视频的作者使用这个库来调用函数getch()
,据我所知,该函数用于使用方向箭头。
例如,在其中一个视频中,完成了以下操作:
#define TECLA_ARRIBA 72
#define TECLA_ABAJO 80
#define ENTER 13
// acá va el código del menú
do
{
tecla = getch();
}
while(tecla != TECLA_ARRIBA && tecla != TECLA_ABAJO && tecla != ENTER);
我的问题是,我不知道使用类似的库是否正确,conio.h
或者conio2.h
因为我在某些网站上读到这些库已被弃用,而且它们的使用在 C++ 中是一种不好的做法。
所以我想知道如何在不使用此类库的情况下在 C++ 中使用方向箭头。另一方面,我尝试了我在 VS 2017 中看到的一个程序,如果它编译,只要它更改getch()
为_getch()
. 这是否意味着conio.h
在 VS 中使用该库没有问题,还是应该避免使用这样的库?
提前感谢您的评论和/或回答。
conio.h
这不是标准的。问题不在于它们被弃用,而在于它们不是标准的。
conio.h
它不是C 标准库的一部分。如果它是标准 C 库,那么在 C++ 中使用它的正确方法是使用具有c
前缀且缺少扩展名的 C++ 适配库。因此,如果它conio.h
是一个标准库,它在 C++ 标准中的版本将是cconio
. 有关更多详细信息,请参阅此线程。它是什么
conio.h
?该头文件是平台编译器提供的实用程序,它声明了几个函数以允许用户与控制台交互,并且提供的函数因编译器和平台而异,总之它既不遵循ANSI C也不遵循POSIX。这就是为什么不推荐使用它的原因,因为它使代码不可移植。
备择方案。
不幸的是,C++ 没有任何标准实用程序来处理这种用户交互。控制台被读取,因为
std::cin
它是数据缓冲区之上的一层,返回已处理的信息,箭头键不被视为数据。为了避免使用,
conio.h
您应该自己查阅平台的文档并了解如何查阅箭头键,这使我们回到第一点:由于您没有使用标准头文件,因此您的代码将不可移植,因此不建议使用它。您可以使用抽象此过程的第三方库,而不是使用平台相关的标头,我知道Boost.Asio能够做到这一点,但我不能肯定地说,因为我还没有测试过。
不便携有那么糟糕吗?
这并不奇怪。如果您的程序不需要可移植性,那么使用平台相关的头文件应该不是问题。然而,除了可移植性问题之外,不使用标准头文件有时也会出现问题:这些头文件可能比标准头文件更频繁地更改,因此不兼容或在不同版本之间表现不同。
以下划线 ( ) 开头的符号
_
不是保留字,而是保留供内部编译器使用,您不应在代码中使用它们。