简单的'按键'程序

时间:2011-05-19 15:16:36

标签: c++ keyboard

我刚刚开始使用C ++,我正在尝试找出如何检测已按下的键。我理解'a'的ASCII码是97.所以......

1)以下程序有什么问题?

#include <iostream>
using namespace std;

int main()
{
char thing[1];

cin >> thing;
if (thing == 97)
    cout << "You pressed 'a'!\n";
return 0;
}

2)我怎样才能这样做,而不是必须输入字母作为输入并按回车键,程序只是立即接受按键?

3 个答案:

答案 0 :(得分:3)

  

我刚刚开始使用C ++

欢迎!我知道你会发现学习编程C ++既令人困惑又令人愉快。我可以建议你先获得一本好的C ++书吗?这里有很好的书籍清单:The Definitive C++ Book Guide and List

  

1)以下程序有什么问题?

#include <iostream>
using namespace std;

您不应导入整个std命名空间。该命名空间中有很多符号,在某些时候你几乎肯定会碰到其中一个符号。我知道许多初学教科书都会指导你这样做。不。

int main()
{
  char thing[1];

没有理由声明thing数组。它应该是char thing;

  cin >> thing;

因为,当你这样做时,你会创建一个缓冲区溢出错误。由于thing是一个数组,cin会将thing视为C风格的字符串,并且很乐意将整个输入行写入其中,即使它不适合。

if (thing == 97)
  cout << "You pressed 'a'!\n";
  • (假设您没有修复thing的定义),thing==97将数组与常量97进行比较。更具体地说,它将数组的第一个元素的地址与常量进行比较这是件坏事,甚至可能都不会编译。
  • (假设你修正了thing的定义),裸常量97让你的代码的读者感到困惑,包括你自己。而是将thing与同等有效的整数常量'a'进行比较。

全部放在一起:

#include <iostream>
using std::cout;
using std::cin;

int main()
{
  char thing;

  cin >> thing;
  if (thing == 'a')
    cout << "You pressed 'a'!\n";
  else
    cout << "You pressed not-'a': " << thing << "\n";
  return 0;
}
  

2)我怎样才能这样做,而不是必须输入字母作为输入并按回车键,程序只是立即接受按键?

正如其他人所指出的那样,您必须使用特定于平台的API。在Microsoft Windows上,尝试getch()

答案 1 :(得分:1)

1)

cin >> thing
如果他们在按Enter之前按下多个字符,则

是不安全的,因为你只为1个字符分配了空格。

另外,你想要

if(thing[0] == 97) // ...

2)没有标准的方法。函数getch()适用于某些平台。

答案 2 :(得分:-1)

使用函数_getch()为您提供角色,而无需等待回车键。只需包含conio.h并使用它。

它适用于Windows,但对于Visual C ++,它已被列为已弃用。所以这是一种非标准的方式而且不便携。

#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    int character;

    character = getch_();
    if (character == 97)
        cout << "You pressed 'a'!\n";
    return 0;
}

如果要返回按下的键的字符代码并将按下的字符输出到控制台,则可以使用getche_()