当我使用getch时,它总是将读取的角色附加一个空字符。
当我使用以下代码时:
#include "stdafx.h"
#include <conio.h>
int main()
{
char c = 0;
while (c != 'x')
{
c = _getch();
printf("Char read: <%c> \n", c);
}
}
当我按下“ asdx”键时,它会返回控制台上的以下内容:
Char read: <a>
Char read: < >
Char read: <s>
Char read: < >
Char read: <d>
Char read: < >
Char read: <x>
这是在VS 2017中的一个普通的新单个文件项目中编译的,该项目在Windows 10控制台窗口上运行。我尝试删除_UNICODE和UNICODE定义。
答案 0 :(得分:4)
好吧,废话!
这是Windows中的(相当新的)错误。
https://developercommunity.visualstudio.com/content/problem/247770/-getch-broken-in-vs-157.html
”使用_getch()函数构建控制台应用程序时 每次按键突然返回两次”
从Microsoft获得以下响应:
“感谢您的举报!此问题将在以后的Windows中修复。 更新。”
更新: 如上面的链接所述,将运行时设置为静态链接与 C运行时的先前版本将解决此问题,但是您需要确保所有相关项目(例如,如果您正在构建库)还使用相同的运行时。 (我测试过)
答案 1 :(得分:2)
如果您不想(或不能)使用Universal C Runtime的先前版本,则可以使用_getwch
代替_getch
,因为该问题不会影响到_getwch
功能。
请注意,_getwch
可以返回Unicode字符,因此对于某些键,它可能返回与_getch
不同的值。例如,对于€
字符,_getch
返回0x3f(?
),而_getwch
返回0x20ac(€的Unicode值)