您能否在不使用 GetAsyncKeyState 或线程的情况下同时获取用户输入,同时还 运行 C++ 中用于 windows 程序的函数?

Can you simultaneously get user input while also running a function in C++ for a windows program without using GetAsyncKeyState or threading?

我有一个项目,我正在使用 Dev-C++ 作为 IDE 和 Windows 作为操作系统。由于项目的大小限制和当前知识,项目的复杂性受到限制,我宁愿避免使用 GetAsyncKeyState 和线程,除非我可以使用相当简单(少于 10 行)的方法。

我的程序目前使用 Text 函数显示文本,使用字符串并将它们输出到控制台 window。我想实现一个功能,允许用户按下一个键,并允许打印文本,而无需等待函数读取整个字符串。

例如:

"Welcome to ..." [user presses space bar while the text is slowly being displayed character by character]

"Welcome to my program! This was developed by me!" [entire string is displayed]

代码:

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] != '[=12=]')
        {
            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++;
            }
        }
    }
}

不,你不能以便携的方式。原因是通常的控制台上的标准 I/O 等待一行完成,因此您无法在键入时立即捕获单个字符。

不过,您可以使用非标准函数来实现!参见 Capture characters from standard input without waiting for enter to be pressed