我输入一个时,getch返回2个字符

时间:2018-08-10 18:40:28

标签: c++ visual-studio-2017 console-application

当我使用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定义。

2 个答案:

答案 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值)