C изменить канонический режим в Windows

#c #include

#c #включить

Вопрос:

После поиска множества потоков по этому вопросу я не нашел ни одного в Windows, только Linux, Ubuntu и т.д.

Короче говоря, я пытаюсь выяснить, как отключить канонический режим, чтобы ввод в консоль приводил к мгновенному вводу без необходимости нажимать enter.

Более длинная версия. Это то, что я пытаюсь сделать прямо сейчас: когда PGM приостанавливается (текстовая игра), пользователю предлагается ввести клавишу со стрелкой, чтобы переместить игрока по 2D-массиву. Но cin.get() cin.ignore() и некоторые другие вещи, которые я пробовал, требуют нажатия enter, прежде чем он продолжит.

Печально известный system("pause>nul"); действительно работает, но, как я читал в разных других местах, это очень плохая практика.

Это часть кода. cout инструкции предназначены только для тестирования:

 //While loop
if(GetAsyncKeyState(VK_UP)){
        cout << "up" << endl;
}
else if(GetAsyncKeyState(VK_DOWN)){
        cout << "down" << endl;
}
else if(GetAsyncKeyState(VK_LEFT)){
        cout << "left" << endl;
}
else if(GetAsyncKeyState(VK_RIGHT)){
        cout << "right" << endl;
}
else{
    break;}

//pauze and check for arrow key input here
  

Ответ №1:

Вы getch также можете использовать в Windows:

Я знаю, что это C, и вы получили устаревшее предупреждение, но оно работает…

этот код выполняется в цикле, пока вы не нажмете Enter:

проверьте, что происходит при нажатии клавиши со стрелкой…

 #include <stdio.h>
#include<conio.h>
int main ()
{
  int c;
  do {
    c=getch();
    printf("%dn",c);
  } while (c != 13);
  return 0;
}