在cpp中使用getchar()实现等待按键结束循环会使循环卡住一直等待输入,我希望它在没有键盘输入时一直保持运行
时间: 2024-05-04 12:16:19 浏览: 128
你可以使用非阻塞模式来实现该功能。在使用 getchar() 函数之前,可以将标准输入流 stdin 的模式设置为非阻塞模式,当键盘有输入时再使用 getchar()。下面是一个简单的代码示例:
```
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
int main()
{
struct termios oldt, newt;
int ch;
// 保存旧的终端设置
tcgetattr(STDIN_FILENO, &oldt);
// 复制旧的终端设置并修改
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO); // 非规范模式和不回显
tcsetattr(STDIN_FILENO, TCSANOW, &newt); // 应用新的终端设置
// 循环等待按键输入
while (1)
{
if (read(STDIN_FILENO, &ch, 1) != 1) // 非阻塞读取一个字符
{
// 没有输入,可以做一些其他事情
printf("Waiting...\n");
sleep(1);
continue;
}
// 处理输入字符
printf("Input: %c\n", ch);
if (ch == 'q') // 如果输入 q 键,退出循环
{
break;
}
}
// 恢复旧的终端设置
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
return 0;
}
```
该代码会不断地在没有按键输入时打印 Waiting...,每次等待 1 秒钟。当有按键输入时会打印 Input: XXX,其中 XXX 是输入的字符。
另外,这种方式虽然可以实现保持循环运行,但是在非阻塞模式下读取字符可能会引起一些问题,比如无法读取特殊按键(如方向键)等。因此,建议在实际使用时结合具体情况进行调整。
阅读全文