Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C语言中,如何在执行另一个函数时不断获取用户输入?_C++_C_Windows_Puzzle - Fatal编程技术网

C++ 在C语言中,如何在执行另一个函数时不断获取用户输入?

C++ 在C语言中,如何在执行另一个函数时不断获取用户输入?,c++,c,windows,puzzle,C++,C,Windows,Puzzle,这个问题真的让我很不安,我不知道如何用C语言来解决这个问题: 在无限循环中显示一系列数字(1、2、3、4、5…等)。如果有人按了一个特定的键(比如退格键),程序应该退出 我的尝试是创建一个循环,然后每次都获取用户输入 int main() { char userInput; int i = 0; while(true) { Sleep(1000); printf("%d", ++i); userInput = getch

这个问题真的让我很不安,我不知道如何用C语言来解决这个问题:

在无限循环中显示一系列数字(1、2、3、4、5…等)。如果有人按了一个特定的键(比如退格键),程序应该退出

我的尝试是创建一个循环,然后每次都获取用户输入

int main()
{
    char userInput;
    int i = 0;

    while(true)
    {
       Sleep(1000);
       printf("%d", ++i);
       userInput = getch();
       fflush(stdin);

       if (userInput == '\b'){
        break;   
       }           
    }

    getch();
    return 0;

}
但这并不是问题所寻求的答案。它确实希望在检查用户输入时继续打印数字

有人能帮一个新手吗?谢谢D

更新: 马克·威尔金斯先生刚刚用_kbhit()函数给了我答案。 这就是我的解决方案:

int main()
{
    int i = 0;
    char userInput;

    while( !_kbhit() && userInput != '\b' )
    {
       Sleep(500);
       printf("%d", ++i);    
    }

    getche();

    getch();
    return 0;

}

您可以调用以检查输入是否正在等待。如果有,那么您可以使用
\u getch

阅读它。您可以使用线程来完成您需要的任务,但线程应该小心处理


使布尔值最初为真。当用户输入所需的字符时,将其设置为false。循环应该在线程内,并检查此布尔值。当布尔值设置为false时,循环应退出。

简短回答:如果希望程序可移植,则不能退出

<>强>长回答< /强>:对于标准C或C++,键击没有可移植的方法。为此,您必须使用特定于操作系统的库

顺便说一句,由于您使用了getch(),我假设您使用的是1989年以前的一个古老的DOS编译器。坏主意,坏主意。 除非您在UNIX上使用Curses,它提供了getch()实现

我想这个编程问题的来源也是很古老的。使用符合标准的现代编译器,如gcc/g++或MSVC.:-)

如果您刚刚开始编程,请遵守标准,不要使用特定于平台的代码。

kbhit是一个
函数,代表了一种非常过时的做事方式

注意“C编程语言书中没有描述它,它不是C标准库ISO C的一部分,POSIX也不需要它。”

如果标准I/O程序中唯一需要的特殊功能是允许用户在处理过程中终止,则有一个基本的理解,即用户可以使用Ctrl-C来完成此操作:

如果你想做一些高级的事情,比如知道用户何时同时按下键盘上的两个键(比如光标键和一个用来指示点火的键),你需要挖掘某种跨平台库。问问游戏开发者:


GUI环境中的开发工具通常基于事件循环,并且通常提供可以监视的“keydown”和“keyup”等事件,而不是仅能够接收可打印字符。有了这些事件,你可以(例如)通常告诉一个人在数字键盘上按下“1”和在顶部行上的区别…或者当左控制键被按下而不是右边。< /P>你应该下定决心,在语言,C或C++。为什么?学习多语言没有什么错。@ PoodLead问题是不知道对方,在C定义为C/C++时,自满自足,而C++是C/C++(我的(显然不是很清楚)点)。但是把它标记为C和C++都是有效的,代码是有效的C和有效的C++,这个问题可能对C和C++程序员都有用。这可能行得通……对于任何字符输入都很容易实现,但我不知道如何实现它以只响应特定字符(如backspace)。@Raven:它将处理backspace字符_kbhit将返回true,_getch将返回ASCII代码0x08。谢谢你,伙计,但是你给我看的链接是C的,多线程可能对我来说太过分了:D