【问题标题】:Send output on key press按键发送输出
【发布时间】:2013-07-26 06:02:37
【问题描述】:

我编写了一个显示数学表的简单 C++ 程序:

#include <iostream>
using namespace std;
int main()
{
    int number, result, var=0;
    cout << "Enter number to generate table:";
    cin >> number;
    while (var < number*10)
    {
        result = number + var;
        cout << "\n" << result;
        var += number;
    }
    cin>>var;
    return 0;
}

因此,当用户输入一些数字(例如 22)并在控制台窗口中点击 Enter 时,表格将生成。但我想在用户输入数字时立即显示结果。不应要求用户按 Enter

如何在用户不按 Enter 的情况下处理输入?

【问题讨论】:

  • 我们需要更多信息。 C++ 本身没有按键的概念。
  • 你能看看this
  • 这是一个控制台和平台功能。在不知道您使用的是什么控制台和/或平台的情况下,我们甚至都不知道这是否可能。某些控制台在您按 Enter 之前不会发送任何按键。 (虽然你今天很难找到其中任何一个。)
  • 不确定我是否完全理解,但您可以在生成输出后通过刷新缓冲区 (std::cout &lt;&lt; std::endl;) 获得所需的效果。
  • 你的程序将如何决定用户是完成了写作还是他想添加另一个数字?

标签: c++


【解决方案1】:

getch() from &lt;conio.h&gt;,输出按下的单键的ASCII码。您可以在之后处理返回的值。像这样的:

#include <conio.h>
#include <ctype.h>
int main()
{
    int myVar = 0;
    myVar = getch();
    if (isdigit(myVar))
    {
        myVar = myVar - '0';
    }
    return 0;
}

缺点是getch()只能读取 1 个密钥

【讨论】:

  • 用我的例子。而不是myVar 使用number,如果isdigit(number) 返回false,您应该返回而不是执行其余代码。
  • 并将cin &gt;&gt; number替换为number = getch()
  • 我收到错误“isdigit 未在此范围内声明”
  • #include&lt;ctype.h&gt; 实现isdigit
【解决方案2】:

对于没有 Enter 键的输入,您可以使用 conio.h 中的 getch() 函数。 它需要一个输入字符。如果要在控制台上显示(回显)输入,请使用 getche() kbhit() 是另一个可以检测任何键盘按下的函数..

【讨论】:

    【解决方案3】:

    在 VC++ 中,您可以为给定特定输入 (var) 的项目的 LostFocus() 实现相同的逻辑,但在 C++ 中,如果您按下 Enter 键,则 cin 从控制台获取值不按回车,则值不会从控制台传递到 pgm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多