gpt4 book ai didi

c - 每 x 秒显示一些不同的输出

转载 作者:行者123 更新时间:2023-11-30 16:46:18 25 4
gpt4 key购买 nike

我想每 x 秒输出一次我按下的最后一个键的 ASCII 代码。

例如:

如果我按 a(97),终端应该每隔 x 秒显示 97。当我现在按 w(119) 时,程序现在应该打印 119 而不是 97。到目前为止,我的程序只打印我按下的第一个键。

以下是主要方法和其他方法:

int main(int argc, char const *argv[]){
printf("Hello World!");
while(1){
movePlayer();
fflush(stdout);
sleep(1);
}
return 0;
}

void movePlayer(){
system("/bin/stty raw");
int input = getchar(); //support_readkey(1000);
//fprintf(stdout, "\033[2J");
//fprintf(stdout, "\033[1;1H");
printf("\b%d",input);
system("/bin/stty cooked");
}

编辑:

经过一些测试,我现在有了解决我的问题的方法

int read_the_key(int timeout_ms) {
struct timeval tv = { 0L, timeout_ms * 1000L };
fd_set fds;
FD_ZERO(&fds);
FD_SET(0, &fds);
int r = select(1, &fds, NULL, NULL, &tv);
if (!r) return 0;

return getchar();
}

最佳答案

getchar()等待仅一个字符,所以这样:

while(1){
movePlayer(); // getchar() and printf() here
fflush(stdout);
sleep(1);
}

导致此行为。您读取一个字符,然后在 movePlayer() 中打印它。然后刷新输出缓冲区并进入休眠状态。然后你就重复,这意味着你必须再次输入。

存储输入并根据需要再次打印。但是,您的函数将始终等待新输入到达。

<小时/>

这是对 read() 的尝试按照建议,但它的行为与您现在的代码类似:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int old_c = -1;
char c[1] = {0};

void movePlayer();

int main(int argc, char const *argv[]){
while(1) {
movePlayer();
fflush(stdout);
sleep(1);
}
return 0;
}

void movePlayer(){
system("/bin/stty raw");
if(read(STDIN_FILENO, c, sizeof(c)) > 0)
old_c = (int)c[0];
if(old_c == -1)
old_c = (int)c[0];
printf("\b%d", old_c);
system("/bin/stty cooked");
}

请阅读read() from stdin继续。您可以告诉 read() 等待多少个字符然后返回,但是您如何知道用户是否打算输入新字符来命令 read()等待用户输入?

因此,我想说,至少据我所知,你不能用简单的方法做你想做的事。您可以让您的程序将过时的输入提供给标准输入,以便您的程序有读取用户输入的印象。但是,如果用户实际输入了新的输入,您的程序应该仔细处理这种情况。

关于c - 每 x 秒显示一些不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43822575/

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