Je voudrais écrire un petit programme C qui exécute une boucle infinie jusqu'à ce que l'utilisateur appuie sur une touche du clavier (ie: il y a un caractère dans le tampon stdin). Je rencontre des problèmes en cassant la boucle sur l'entrée de l'utilisateur. J'ai essayé d'utiliser fgetc
mais cela ne se comporte pas comme prévu. Le code ci-dessous attend pour l'entrée de l'utilisateur plutôt que d'exécuter jusqu'à l'entrée utilisateur.Comment faire pour qu'un programme C arrête une boucle à partir de n'importe quelle entrée utilisateur?
Exemple de code C:
while((c=fgetc(stdin) == EOF) {
/* Does stuff for infinite loop here */
printf("Example work in the loop\n");
}
printf("Out of the loop!\n");
Comment puis-je écrire une boucle qui exécute jusqu'à intervention de l'utilisateur? Appuyer sur n'importe quelle touche ou une touche spécifique pourrait être le déclencheur de l'intervention.
Note 1: Je vous écris ceci pour une console Unix en cas de plate-forme de solutions spécifiques
Note 2: Ne suggérez pas Ctrl + C/X/Z
comme déclencheur d'intervention de l'utilisateur
connexes: http://stackoverflow.com/questions/149860/how-to-prevent-fgets-blocks-when -file-stream-has-no-new-data – tjameson
duplication possible de [C entrée clavier non-bloquante] (http://stackoverflow.com/questions/448944/c-non-blocking-keyboard-input) – fvu
Si votre programme a un tty pour stdin, un utilisateur en tapant une clé ne fournira aucune entrée au programme. Le tty n'enverra rien à votre programme tant que l'utilisateur n'aura pas tapé 'enter' ou envoyé un signal via^C ou ^] ou^Z. Clarifiez votre question. Voulez-vous répondre à une entrée ou souhaitez-vous répondre à un événement de clavier? Les deux sont différents. –