如何在不按Enter和没有getch()或getche()的情况下读取C ++中的字符?

时间:2014-11-05 07:37:12

标签: c++ console-application cin c++-standard-library getch

在C中,我可以使用getch()获取输入,而无需用户按Enter键。 C ++中是否有标准函数执行getch()函数。我不想使用conio.h或其他特定于平台的库。

while (choice!='q')
{
    cout << "Enter a six digit number(0 to 999999)";
    cin >> input;
    start.controller(input);
    cout << "Press r to repeat\nPress q to quit";
    cin >> choice;
}

我只想重复这个过程,直到用户按q。现在用户必须按ENTER键。

2 个答案:

答案 0 :(得分:3)

没有。标准C ++库不包含任何类型的终端管理。它甚至不假设您的终端具有除线路之外的任何输入功能。您需要一个能够了解特定终端如何工作的库或代码。

答案 1 :(得分:2)

Marshall Cline C++ FAQ对此进行了详细介绍:

  

[15.17]我怎么能告诉{如果一把钥匙,哪个钥匙}在之前被按下了   用户按ENTER键?

     

这不是标准的C ++特性--C ++甚至不需要你的系统   有一个键盘!这意味着每个操作系统和供应商都可以   它有点不同。

     

有关详细信息,请阅读编译器随附的文档   在您的特定安装上。

     

(顺便说一句,UNIX上的进程通常有两个步骤:首先设置   终端到单字符模式,然后使用select()或   poll()测试是否按下了某个键。你可能能够适应这一点   代码。)

C ++标准也说§1.9[intro.execution]:

  

1本国际标准中的语义描述定义了一个   参数化非确定性抽象机。这个国际   标准对符合结构没有要求   实现。特别是,他们不需要复制或模仿   抽象机器的结构。相反,符合实施   需要模仿(仅)抽象的可观察行为   机器如下所述。 5

     

8符合实施的最低要求是:

     

- [..]

     

- 交互式设备的输入和输出动态应以在程序等待输入之前提示输出实际传送的方式进行。 交互式设备的构成是实现定义的。