gpt4 book ai didi

c - getch() 在最新版本的 Microsoft Visual Studio 2017 C 中无法正常工作

转载 作者:行者123 更新时间:2023-12-04 10:16:54 24 4
gpt4 key购买 nike

过去几周我一直在研究一个基本上依赖于 getch() 函数的应用程序,然后我最近决定更新 Visual Studio,却发现我的程序完全损坏并且不再工作。

这是我所拥有的一个简单示例:

main(){
while (1){
//The program loops until 's' is pressed (this still works)
com=getch();
if(com=='s'){
//The program used to stop here and wait for input (now it doesn't)
com=getch();
if(com=='d') printf("Victory!\n");
else break;
}
}
}

*这不是我的程序的一部分这只是一个示例,需要按“s”然后按“d”才能获胜

现在,这在我更新之前就起作用了,我知道是因为我花了 50 多个小时在该程序上工作,并且它的工作方式如下:

程序将到达 getch() 并等待我的输入,如果我按下“s”,则 if 将触发执行其功能,然后它将到达第二个 getch() 并等待我的输入,因此您将按下“d” '并获胜!

重点是,它曾经在每个 getch() 时等待我的输入!

但是现在,新的更新等待第一个 getch() 但 complitley 忽略了第二个,这很好地结束了程序并且没有办法获胜。

也许我做了什么,也许 getch() 现在是非法的,我不知道,我吃晚饭不开心,我不知道该怎么办......

无论如何,提前致谢,如果您还有什么需要了解的,请随时询问。我是编程新手,所以不要指望任何高级别的答案!

编辑:
我又花了几个小时探索代码:
#include <conio.h>
#include <stdio.h>
main(){
char com;
while(1){
com=getch();
printf("You pressed: %c\n",com);
}
}

Here are the results:
You pressed: d
You pressed:
You pressed: s
You pressed:
You pressed: a
You pressed:

输入是“d”、“s”和“a”。

最佳答案

这是 Windows 中的一个错误。根据 this thread ,系统DLL ucrtbase.dll版本 17134 引入了该错误。此 DLL 由 VS2017 和 Windows 10 build 1803 分发。

他们 promise 会修复它,但目前还没有修复方法。这个错误破坏了许多使用 _getch() 的已编译应用程序的行为。 .

要解决此问题,您可以:

  • 修改您的代码以丢弃额外的返回值(它们具有值 0 )。
  • 使用 _getwch()反而。
  • 使用 Windows API ReadConsole函数(参见示例代码的链接线程)。
  • 关于c - getch() 在最新版本的 Microsoft Visual Studio 2017 C 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52357948/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com