循环时继续迭代/重复,直到按Enter(或任意键)

时间:2019-01-18 22:18:25

标签: c while-loop user-input

我试图获得一个while循环来迭代,直到按下一个理想的输入键为止。

具体来说,我想要的是一个值不断更新并在用户按Enter之前对用户可见。

这是我正在使用的基本代码,无法正常运行

while(1){       
    printf("Press Enter to Continue\n");    
    printf("Value to Update: %f\n",value_to_update); 
    usleep(10000);      
    system("clear"); 
    while(getchar() != '\n'){
        continue; 
    }       
}; 

谢谢。很高兴澄清我所说的话或回答其他问题。

我不确定如何确切解释我要寻找的内容。我将尝试两种方法:

1)我希望它执行以下代码,除了在用户按Enter键时停止:

while(1){           
    printf("Value to Update: %f\n",value_to_update); 
    usleep(10000);      
    system("clear"); 
};

2)我将列举步骤

1)打印值以更新到屏幕

2)等待N微秒

3)用户是否按回车键?

3.False)如果否:清除屏幕,请转到步骤1

3.True)如果是:从循环中断

我想这比我想象的要困难得多。

2 个答案:

答案 0 :(得分:1)

while(getchar() != '\n'){
        continue; 

它没有您的想法。

您想打破第一个循环。

If(getchar() == char_which_breaks_the_loop) break;

答案 1 :(得分:1)

以下是使用select调用的示例代码。

适用于换行符,因为内核TTY层将一直保持到 it 获得换行符为止。

因此,对于其他任何字符(例如空格),我们都必须发出我在最上面的注释中提到的ioctl调用,以将图层置于“原始”模式(与之相比,默认为“煮熟” ”)。如果需要,请参阅tcgetattrtcsetattr通话。

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

int
main(void)
{
    int fd;
    char buf[10];
    int len;
    fd_set rdset;

    fd = 0;

    while (1) {
        // this is do whatever until newline is pressed ...
        printf(".");
        fflush(stdout);

        // set up the select mask -- the list of file descriptors we want to
        // wait on for read/input data available
        FD_ZERO(&rdset);
        FD_SET(fd,&rdset);

        // set timeout of 1ms
        struct timeval tv;
        tv.tv_sec = 0;
        tv.tv_usec = 1000;

        // wait for action on stdin [or loop if timeout]
        // the first arg must be: the highest fd number in the mask + 1
        len = select(fd + 1,&rdset,NULL,NULL,&tv);
        if (len <= 0)
            continue;

        // we're guaranteed at least one char of input here
        len = read(fd,buf,1);
        if (len <= 0)
            continue;

        // wait for newline -- stop program when we get it
        if (buf[0] == '\n')
            break;
    }

    printf("\n");

    return 0;
}