【问题标题】:Why use conio.h?为什么要使用 conio.h?
【发布时间】:2020-05-05 19:07:59
【问题描述】:

我经常看到人们在 C 和 C++ 中使用 conio.h 的头文件,尽管与标准库函数相比,我看不出使用 conio.h 内部的函数有什么主要好处。 conio.h 还具有依赖于 Windows/MS-DOS 环境并且不属于 C 标准的缺点。

  • 选择conio.h功能的原因是什么?
  • conio.h 内部的函数提供了什么,标准 C 库的函数不能提供什么?
  • 为什么选择conio库?

【问题讨论】:

  • conio 表示控制台 I/O。对于控制台应用程序也是如此。
  • 它有一种简单的方法来获取原始键盘输入
  • 在标准 C 库中没有与 kbhit 等价的等价物。
  • 有多少人仍在使用 Turbo C++,这总是让我感到惊讶。
  • @Ayxan -- C Standard Library 中的哪些函数类似于kbhit()

标签: c++ c input console conio


【解决方案1】:

conio.h 头文件是 Turbo C 特有的,它比最早的 C 标准早了几年。它包含特定于 DOS 命令行的例程。这里经常使用的一个功能是getch,它允许一次读取一个字符,而无需按 Enter 键。它还包含gotoxy,允许将光标放在终端中的特定位置

一般来说,像这样与终端通信的方法是非常特定于操作系统的,因此每种方法都有自己的(通常是不可移植的)方式。

这与 stdio.h 中包含 printfscanfgetchar 等函数的函数形成对比,无论使用哪种类型的控制台,它们都可以正常工作。

【讨论】:

  • <conio.h>MSVC 支持。已声明函数的名称在最近的版本中已更新,以通过添加前导下划线(例如 _getch)来遵循标准 C 规则,以实现特定于实现的名称。
【解决方案2】:

选择conio.h函数的原因是什么?

它具有标准库不提供的功能,选择它的人不(知道)关心移植到其他系统。

conio.h 中的函数提供什么,标准 C 库的函数不能提供什么?

这些是一些没有标准替代品的功能。可能还有其他人:

kbhit
clrscr
getch
getche

标准库可能可以提供这些功能。但事实并非如此。

为什么选择conio库?

因为你被教导使用它,而你不(知道)关心移植到其他系统。

【讨论】:

  • 现代替代品可能是ncurses
  • @JesperJuhl ncurses 支持 windows 吗? PDCurses 是一个支持 windows 的 curses 端口。
  • 另一个替代品可能是使用窗口或图形框架。
  • Qt 在跨平台的同时也可以在某些时候替换一些功能。
猜你喜欢
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 2012-08-22
  • 2016-09-12
相关资源
最近更新 更多