C++ 在C语言中,如何在执行另一个函数时不断获取用户输入?
这个问题真的让我很不安,我不知道如何用C语言来解决这个问题: 在无限循环中显示一系列数字(1、2、3、4、5…等)。如果有人按了一个特定的键(比如退格键),程序应该退出 我的尝试是创建一个循环,然后每次都获取用户输入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
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