Я провел последние пару недель, работая над приложением, которое в основном полагается на функцию getch (), затем я недавно решил обновить визуальную студию только для того, чтобы узнать, что моя программа полностью сломана и больше не работает.
Вот простой пример того, что у меня есть:
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 (), но compitley игнорирует второе, что хорошо завершает программу, и нет никакого способа выиграть.
Может, я что-то сделал, может, 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».
Я полагаю, лучшего решения нет ... Спасибо за помощь
Попробуйте printf("You pressed %c (%d)\n", com, com);
Неявный int больше не является частью языка C.





Это ошибка Windows. Согласно эта ветка, системная DLL ucrtbase.dll версии 17134 внесла ошибку. Эта DLL распространяется как VS2017, так и Windows 10 build 1803.
Они обещали исправить это, но пока нет исправления. Эта ошибка нарушила поведение многих скомпилированных приложений, использующих _getch().
Чтобы обойти проблему, вы можете:
0)._getwch().ReadConsole (пример кода см. В связанной ветке).