Existe-t-il un moyen de recevoir du texte le plus rapidement possible sans attendre une nouvelle ligne?

J’utilise C. J’ai écrit un programme très simple qui imprime l’entrée en utilisant getchar () et putchar () ou printf (). Y a-t-il moyen de le faire dès que l’utilisateur tape une touche, le programme l’enregistre, sans attendre une entrée? Laisse moi voir:

Actuellement, si l’utilisateur tape “abc” puis appuie sur Entrée, le programme imprime “abc” et une nouvelle ligne et continue d’attendre d’autres entrées. Je veux faire en sorte que dès que l’utilisateur tape “a”, le programme imprime “a” et attend plus d’entrées. Je ne suis pas sûr si cela doit être fait dans le code source ou si quelque chose doit être changé dans la ligne de commande Windows.

Juste au cas où, voici le code source:

#include  int main() { int c; while ((c = getchar()) != EOF) { putchar(c); } return 0; } 

si vous utilisez Visual Studio, il existe une bibliothèque appelée conio ( #include ) qui définit une fonction kbhit () et getch ().

sinon, sous Windows, il est toujours possible d’utiliser des fonctions du Kit de développement logiciel (Kit de développement logiciel) (ReadConsoleInput (), etc.), mais cela nécessiterait un peu plus de code le temps que vous voulez)

Si vous utilisez Visual Studio, vous pouvez utiliser getch() .

Dans ce cas simple, les autres réponses devraient vous convenir.

La solution générale consiste à désactiver la mise en mémoire tampon des lignes. Cela dépend de la console particulière; L’exemple suivant concerne uniquement Windows (non testé):

 #include  int main() { HANDLE hConsole = GetStdHandle(STD_INPUT_HANDLE); DWORD mode; GetConsoleMode(hConsole, &mode); SetConsoleMode(hConsole, mode & ~ENABLE_LINE_INPUT); // ... } 

Je suppose que les fonctions standard de la bibliothèque C sont implémentées en termes de ReadConsole et d’amis; sinon, cela pourrait même ne pas fonctionner. (Je suis actuellement sous Linux, je ne peux donc pas tester cela.)

Sous Linux, vous pouvez prendre en charge le terminal:

 #include  #include  #include  system("stty raw"); /* raw output to terminal, direct feedback */ system("clear"); /* clear screen */ printf("Press a key"); answer = getchar(); system("stty cooked"); /* revert back*/