Можете ли вы одновременно получать пользовательский ввод, одновременно выполняя функцию на C ++ для программы windows без использования GetAsyncKeyState или многопоточности? - PullRequest
1 голос
/ 03 апреля 2020

Спасибо, что нашли время прочитать этот вопрос!

Информация

У меня есть проект, над которым я работаю, используя Dev-C ++ в качестве IDE и Windows в качестве операционной система. Поскольку сложность проекта ограничена из-за ограничений размера и текущих знаний, я бы предпочел избегать использования GetAsyncKeyState и многопоточности, если не существует достаточно простого (менее 10 строк) подхода, который я мог бы использовать.

Main Выпуск

Моя программа в настоящее время отображает текст, используя функцию Text, используя строки и выводя их в окно консоли. Я хочу реализовать функцию, которая позволяла бы пользователю нажимать клавишу и позволять печатать текст, не дожидаясь, пока функция прочитает всю строку.

Пример

«Добро пожаловать в ...» [пользователь нажимает пробел, пока текст медленно отображается символ за символом]

«Добро пожаловать в мою программу! Это было разработано мной! [отображается вся строка]

Код

void Text(string input)
{
    int x = 0;
    for(int i = 0; i <= 3; i++) //decides when to stop running based on number of strings
    {
        while (input[x] != '\0')
        {
            if(input[x] == '.' || input[x] == '!')
            {
                cout << input[x];
                Sleep(375);
                cout << " ";
                x++;
            }
            else if(input[x] == '*')
            {
                Sleep(375);
                cout << endl;
                x++;
            }
            else if(input[x] == '~')
            {
                Sleep(2000);
                system("CLS");
                x++;
            }
            else
            {
                cout << input[x];
                Sleep(75);
                x++;
            }
        }
    }
}

Если требуется какая-либо дополнительная информация, оставьте комментарий ниже! Еще раз спасибо за ваше время.

1 Ответ

0 голосов
/ 04 апреля 2020

Нет, вы не можете портативным способом. Причина в том, что стандартный ввод / вывод на обычных консолях ожидает завершения строки, поэтому вы не можете захватить отдельные символы, как только они будут напечатаны.

Этого можно добиться с помощью нестандартных функций, хотя ! См. Захват символов со стандартного ввода без ожидания нажатия клавиши ввода

...