c++ - 从标准输入捕获字符,无需等待按下 Enter 键

标签 c++ c inputstream

我永远不记得我是如何做到这一点的,因为它对我来说很少出现。但在 C 或 C++ 中,从标准输入读取字符而不等待换行符(按 Enter 键)的最佳方法是什么。

此外,理想情况下它不会将输入字符回显到屏幕上。我只想捕获击键而不影响控制台屏幕。

最佳答案

这在纯 C++ 中以可移植的方式是不可能的,因为它太依赖于可能与 stdin 连接的所使用的终端。 (它们通常是行缓冲的)。但是,您可以使用库来实现此目的:

  1. conio 可用于 Windows 编译器。使用_getch()函数可以给你一个字符,而无需等待 Enter 键。我不是一名经常使用 Windows 的开发人员,但我见过我的同学只是包含 <conio.h>并使用它。请参阅 conio.h 在维基百科。它列出了 getch() ,在 Visual C++ 中声明已弃用。

  2. curses 可用于 Linux。兼容的curses 实现也适用于Windows。它还具有 getch()功能。 (尝试 man getch 查看其联机帮助页)。请参阅Curses在维基百科。

如果您的目标是跨平台兼容性,我建议您使用curses。也就是说,我确信您可以使用某些函数来关闭行缓冲(我相信这称为“原始模式”,而不是“熟模式” - 查看 man stty )。如果我没记错的话,Curses 会以一种便携的方式为你处理这个问题。

关于c++ - 从标准输入捕获字符,无需等待按下 Enter 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36433075/

相关文章:

C++ 线程安全 : If only one thread can write to a non-atomic variable but multiple threads read from it.。可以遇到问题吗?

c - I2c bit banging 使用 C 编程

c - 在 Eclipse 中打开文件

java.io.EOFException : Unexpected end of ZLIB input stream

string - 在 Scala 中将输入流转换为字符串的惯用方法

C++将png资源导出到文件

c++ - Visual Studio 2012 中的 round()、rint()(等等)C++ 函数在哪里?

c++ - QtConcurrent.run() 带有 c++11 lambda,捕获对 "this"的引用以发出信号

c - 删除单链表中第二次出现的节点

java - 从 jar 访问 jar 外部的资源