1

我正在用 C/C++ 创建一个基本的控制台应用程序。

在下面的示例中,我以 50 毫秒的延迟反复向控制台写入一些字符,并且我希望它在我击键时退出程序。

#include "pch.h"
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <conio.h>

int PauseRet(int iDuree) {
    unsigned int uiTemps = GetTickCount();
    int iVal = 0;
    do {
        if (_kbhit()) {
            iVal = _getch();
        }

    } while ((GetTickCount() - uiTemps) < (unsigned int)iDuree);

    return iVal;
}

int main()
{
    char c = 0;
    int iTempo = 50;
    while (true) {


        putchar('a');

        c = PauseRet(iTempo);


        if (c) {

            return 0;
        }

    }
}

if(c){...我的问题是,在我的项目中,只有当我在这里设置断点时它才会进入状态:

    if (_kbhit()) {
        <BREAKPOINT> iVal = _getch();
    }

我正在使用视觉工作室 2017。

我已经在新项目的另一台 PC 上尝试过这段代码,我没有遇到任何问题

我相信这与我的项目设置有关。

4

1 回答 1

2

您可能会遇到_getch(). 在 SDK10.0.17134.0上,该错误_getch()将返回被按下的键,并在下一次调用时返回 0。

如果没有断点,_kbhit可能会多次返回 true,这会将 0 放入其中,c而您if(c)将永远不会通过。
使用断点,一旦你按下了键,它就会停在那里,随后会及时释放键,一旦你从断点继续,_getch()将返回被按下的键,并且_kbhit不再返回 true。循环退出后,您将在c.

要解决此问题,请通过再次运行 VS 2017 设置并更新(或降级到 4 月更新之前的内容)和/或下载更新的 SDK 或使用来更新您的 SDK_getwch()

相关的 MS 开发社区错误报告。(固定的)

于 2019-01-10T02:10:19.450 回答