getch() 在最新版本的 Microsoft Visual Studio 2017 C 中无法正常工作
getch() doesn't work properly in the latest version of Microsoft Visual Studio 2017 C
我花了最后几周的时间开发一个基本上依赖于 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.
分发
他们承诺会修复它,但目前还没有修复。这个错误已经破坏了许多使用 _getch()
的已编译应用程序的行为。
要解决此问题,您可以:
- 修改您的代码以丢弃额外的 returns(它们具有值
0
)。
- 改用
_getwch()
。
- 改为使用 Windows API
ReadConsole
函数(示例代码参见链接线程)。
我花了最后几周的时间开发一个基本上依赖于 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.
他们承诺会修复它,但目前还没有修复。这个错误已经破坏了许多使用 _getch()
的已编译应用程序的行为。
要解决此问题,您可以:
- 修改您的代码以丢弃额外的 returns(它们具有值
0
)。 - 改用
_getwch()
。 - 改为使用 Windows API
ReadConsole
函数(示例代码参见链接线程)。