2008-11-23 10 views
0

Je suis nouveau à cpp dans mac. J'ai eu une erreur lorsque j'ai utilisé kbhit() dans mon programme. J'ai utilisé #include mais j'ai aussi eu une erreur, donc j'ai cherché et testé aveC#include mais l'erreur est toujours restée. alors plz aidez-moi. merci d'avance.kbhit() dans mac

+0

S'il vous plaît donner un exemple de code qui produit l'erreur et le message d'erreur –

+0

Voir ma réponse à une question connexe à http://stackoverflow.com/questions/448944/c-non-blocking- clavier-entrée # 448982 – Alnitak

Répondre

1

kbhit() n'est pas standard. En fait, je ne crois pas qu'il existe une fonction standard pour détecter les entrées au clavier. Le mieux que vous puissiez faire est de lire un caractère de stdin en utilisant par ex. fgetc, et j'espère que ce n'est pas redirigé ailleurs.

1

Aucune idée si cela fonctionnerait sur Mac, mais voici un code que j'ai utilisé pour obtenir une seule touche sur Linux.

int mygetch() { 
    char ch; 
    int error; 
    static struct termios Otty, Ntty; 

    fflush(stdout); 
    tcgetattr(0, &Otty); 
    Ntty = Otty; 

    Ntty.c_iflag = 0;  /* input mode  */ 
    Ntty.c_oflag = 0;  /* output mode  */ 
    Ntty.c_lflag &= ~ICANON; /* line settings */ 

#if 1 
    /* disable echoing the char as it is typed */ 
    Ntty.c_lflag &= ~ECHO; /* disable echo  */ 
#else 
    /* enable echoing the char as it is typed */ 
    Ntty.c_lflag |= ECHO; /* enable echo  */ 
#endif 

    Ntty.c_cc[VMIN] = CMIN; /* minimum chars to wait for */ 
    Ntty.c_cc[VTIME] = CTIME; /* minimum wait time */ 

#if 1 
    /* 
    * use this to flush the input buffer before blocking for new input 
    */ 
    #define FLAG TCSAFLUSH 
#else 
    /* 
    * use this to return a char from the current input buffer, or block if 
    * no input is waiting. 
    */ 
    #define FLAG TCSANOW 

#endif 

    if ((error = tcsetattr(0, FLAG, &Ntty)) == 0) { 
     error = read(0, &ch, 1);  /* get char from stdin */ 
     error += tcsetattr(0, FLAG, &Otty); /* restore old settings */ 
    } 

    return (error == 1 ? (int) ch : -1); 
}