执行功能直到按下回车键

时间:2017-09-14 18:52:40

标签: c interrupt

我需要一个函数继续执行,直到用户按下回车键,我想的是:

do{
   function();
} while(getchar() != "\n");

但是我不确定这是否会导致程序在再次执行函数之前等待用户输入内容,不幸的是,由于各种原因,我不能只编写它并快速测试它。这会有用吗?还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

使用线程程序执行相同操作。 在这里,我处理主线程中的输入并在另一个函数的循环中调用该函数,该函数在其自己的线程上运行,直到按下键。

在这里,我使用互斥锁来处理同步。 假设程序名称为Test.c,然后使用-pthread标志进行编译" gcc Test.c -o test -pthread"没有qoutes。 我假设你正在使用Ubuntu。

#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
pthread_mutex_t tlock=PTHREAD_MUTEX_INITIALIZER;
pthread_t tid;
int keypressed=0;
void function()
{
    printf("\nInside function");
}
void *threadFun(void *arg)
{
    int condition=1;
    while(condition)
    {
        function();
        pthread_mutex_lock(&tlock);
        if(keypressed==1)//Checking whether Enter input has occurred in main thread.
            condition=0;
        pthread_mutex_unlock(&tlock);
    }
}
int main()
{
    char ch;
    pthread_create(&tid,NULL,&threadFun,NULL);//start threadFun in new thread 
    scanf("%c",&ch);
    if(ch=='\n')
    {
        pthread_mutex_lock(&tlock);
        keypressed=1;//Setting this will cause the loop in threadFun to break
        pthread_mutex_unlock(&tlock);
    }
    pthread_join(tid,NULL);//Wait for the threadFun to complete execution
    return 0;
}

如果您希望输入其他字符,则可能必须执行scanf()并检查循环。