Cela dépend de votre système d'exploitation, si vous êtes dans un UNIX comme environnement de la ICANON flag est activé par défaut, de sorte que l'entrée est mise en mémoire tampon jusqu'à la prochaine '\n' ou expressions du FOLKLORE. En désactivant le mode canonique, vous obtiendrez les personnages immédiatement. Cela est également possible sur d'autres plates-formes, mais il n'y a pas de droit de l'avant de la croix-plate-forme de solution.
EDIT: je vois que vous avez spécifié que vous utilisez Ubuntu. Je viens de poster quelque chose de similaire hier, mais sachez que cela va désactiver de nombreux comportements par défaut de votre terminal.
#include<stdio.h>
#include <termios.h> //termios, TCSANOW, ECHO, ICANON
#include <unistd.h> //STDIN_FILENO
int main(void){
int c;
static struct termios oldt, newt;
/*tcgetattr gets the parameters of the current terminal
STDIN_FILENO will tell tcgetattr that it should write the settings
of stdin to oldt*/
tcgetattr( STDIN_FILENO, &oldt);
/*now the settings will be copied*/
newt = oldt;
/*ICANON normally takes care that one line at a time will be processed
that means it will return if it sees a "\n" or an EOF or an EOL*/
newt.c_lflag &= ~(ICANON);
/*Those new settings will be set to STDIN
TCSANOW tells tcsetattr to change attributes immediately. */
tcsetattr( STDIN_FILENO, TCSANOW, &newt);
/*This is your part:
I choose 'e' to end input. Notice that EOF is also turned off
in the non-canonical mode*/
while((c=getchar())!= 'e')
putchar(c);
/*restore the old settings*/
tcsetattr( STDIN_FILENO, TCSANOW, &oldt);
return 0;
}
Vous remarquerez, que chaque personnage apparaît deux fois. C'est parce que l'entrée est immédiatement renvoyé à la borne, puis votre programme met de retour avec putchar() aussi. Si vous souhaitez dissocier l'entrée de la sortie, vous avez également à son tour de l'ÉCHO du pavillon. Vous pouvez le faire en changeant simplement la ligne appropriée:
newt.c_lflag &= ~(ICANON | ECHO);