我刚刚开始使用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)我怎样才能这样做,而不是必须输入字母作为输入并按回车键,程序只是立即接受按键?
答案 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_()