2013-03-24 11 views
6

Sto provando a creare una funzione che comporterà printf una determinata stringa se l'utente preme un tasto qualsiasi sulla tastiera TRANNE per capitale P, se l'utente preme P allora si interromperà il cappio.Come utilizzare kbhit e getch (programmazione C)

Tuttavia, non penso di utilizzare _kbhit e _getch correttamente. Io uso il numero 80 perché è il simbolo ASCII per 80 .... mi dispiace per la confusione

void activateAlarm(int channelID) { 

    int key = 0; 

    while(temperatureChannel[channelID].currentTemperature > temperatureChannel[channelID].highLimit 
     ||temperatureChannel[channelID].currentTemperature < temperatureChannel[channelID].lowLimit) { 

     beep(350,100); 

     if (_kbhit()) { 
      key = _getch(); 
      if(key == 'P'); 
       break; 
     }  
    } 
} 
+3

'se (== chiave 'P'); break; 'dovrebbe preferibilmente essere 'if (key ==' P ') break;' – moooeeeep

risposta

11

Non c'è bisogno di spiegare, il codice parla meglio:

#include <conio.h> 

// ... 

printf("please press P key to pause \n "); 

int key = 0; 

while(1) 
{ 
    if (_kbhit()) 
    { 
     key =_getch(); 

     if (key == 'P') 
     break; 
    }  
} 
+2

La modifica n. 4 dovrebbe essere stata approvata perché non sono stati introdotti numerosi errori nel codice: (1) È stato corretto dichiarare 'key' come un 'int', poiché questo è il tipo di ritorno effettivo di' _getch() '. (2) I trattini di sottolineatura iniziali su '_kbhit()' e '_getch()' non dovrebbero essere stati cancellati; le librerie di Visual C++ non definiscono la maggior parte delle aggiunte in stile POSIX usando i nomi POSIX perché, tecnicamente, quelli violano lo standard ISO C++. –

Problemi correlati