Mon intention principale était de faire revenir getchar
dès qu’il récupère un caractère au lieu d’attendre la touche ENTER . J’ai essayé ça
int main() { setvbuf(stdin,NULL,_IONBF,0); getchar(); return 0; }
En comparant cela avec le prototype de setvbuf
setvbuf ( FILE * stream, char * buffer, int mode, size_t size );
il devrait mettre stdin
en mode sans tampon.
Mais toujours getchar()
continue d’attendre ENTER
J’ai vu des articles liés comme celui-ci
Imprimer en lisant des caractères en C
qui suggèrent des méthodes alternatives pour rendre stdin
tampon. Mais je suis curieux de savoir pourquoi la méthode setvbuf
ne fonctionne pas
Le pilote de terminal ne renvoie rien avant que vous ayez appuyé sur return, même si l’opération read()
accepterait ce qui est déjà là.
Pour obtenir une entrée caractère par caractère à partir d’un terminal, vous devez le sortir du mode canonique en mode brut ou cbreak, ce qui nécessite complètement des opérations différentes. Consultez le manuel POSIX sur l’interface générale du terminal pour savoir comment contrôler le terminal. Ou envisagez d’utiliser la bibliothèque curses
.
Voir aussi: entrée de terminal canonique vs non canonique
Si vous essayez ceci sous Linux ou un autre système de type Unix, c’est le terminal qui tamponne l’entrée et ne transmet qu’une ligne entière. Vous pouvez utiliser ncurses pour contourner ceci:
#include int main() { initscr(); getch(); endwin(); return 0; }
Comstackr avec:
gcc -o main main.c -lncurses