gpt4 book ai didi

c - 当 'Enter' 时结束 while 循环

转载 作者:太空宇宙 更新时间:2023-11-03 23:27:59 25 4
gpt4 key购买 nike

我正在尝试创建一个无需用户输入即可无限运行的循环,直到按下“Enter”为止。这是我的程序的简化版本:

do {

printf("Hello\n");

}while(!getchar());

当我编译和运行程序时只输出一个'Hello'并且程序不会继续,直到按下回车程序才会退出。我可以知道我错了哪一部分吗?

谢谢。

最佳答案

这并不容易。您的问题是标准 I/O 函数是同步的。您的 getchar 正在等待一些输入(准确地说是一行输入),它会阻止程序的执行,直到按下 Enter。要在不阻塞的情况下继续执行,您需要使用异步 I/O 操作或 select(或 poll)。 Select 允许您检测下一个 I/O 操作是否会阻塞。查看 select 的文档并试试这个:

#include<stdio.h>
#include<unistd.h>
#include <sys/select.h>

int main() {
fd_set s;
struct timeval timeout;

timeout.tv_sec = 0;
timeout.tv_usec = 100000;

do {
printf("Hello\n");
fflush(stdout);
FD_ZERO(&s);
FD_SET(STDIN_FILENO, &s);
select(STDIN_FILENO+1, &s, NULL, NULL, &timeout);
} while (FD_ISSET(STDIN_FILENO, &s) == 0);

}

关于c - 当 'Enter' 时结束 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22420665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com