有任何方法可以运行无限循环,仅在用户输入键盘时停止
没有要求每个周期继续?在C程序中
(我正在开发一个用for(;;)
循环读取条目的C聊天,我只有在用户想要输入并发送消息时才需要停止它。大家好!
答案 0 :(得分:6)
您没有指定操作系统,所以我将假设一些符合POSIX标准的操作系统。
您可以使用select。这可用于阻止一组文件描述符(在您的情况下,stdin)具有有限超时或无限阻塞。
我的猜测是,因为这是一个聊天程序,你还想在其他文件描述符上执行此操作,例如聊天tcp套接字。因此,您可以使用一个调用来测试两者的输入。
对于Windows控制台,如果select对你不起作用,你应该可以使用GetStdHandle和WaitForSingleObject / WaitForMultipleObjects。
答案 1 :(得分:2)
在Windows中有很多种方法可以做到这一点。假设您使用的是VC ++,最简单的方法可能就是使用_kbhit()
。如果您想直接使用Win32 API,可以调用GetNumberOfConsoleInputEvents()
并查看返回值是否为非。
您也可以执行重叠读取,并且每次通过循环调用WaitForSingleObject
时超时值为0.零等待意味着它将立即返回是否有输入。返回值将告诉您是否有任何数据:WAIT_TIMEOUT表示尚未读取任何数据,WAIT_OBJECT0表示您有一些数据等待处理。