2013-07-12 10 views
1

c'est une question très simple, comment écho chaque caractère que je tape stdin à stdout? J'essaie de le faire depuis longtemps et j'ai essayé de nombreuses façons et personne ne travaille bien. Le mieux que je pouvais faire était d'obtenir ce que j'ai tapé après la fin de l'application.Comment echo stdin stdout

Le meilleur que je l'ai été:

#include <stdio.h> 

int main() 
{ 
    while (1) 
    { 
     int ch = getc(stdin); 

     if(ch == EOF) break; 

     putc(ch, stdout); 
    } 
    return 0; 
} 

Merci.

+0

J'utilise eclipse avec mingw –

+0

C'est tellement nouveau ... Je suis gêné de demander quelque chose d'aussi stupide mais j'ai arrêté d'essayer moi-même. –

+1

Pourriez-vous poster ce que vous avez fait jusqu'ici? – jh314

Répondre

2

Vous devez vider le stdout:

int main() 
{ 
    while (1) 
    { 
     int ch = getc(stdin); 
     fflush(stdout); 
     if(ch == EOF) break; 

     putc(ch, stdout); 
    } 
    return 0; 
} 
+0

Je ne pense pas que je crois que cela aurait pu faire quelque chose pour résoudre le problème. Mais, il se peut que je n'ai tout simplement pas compris le problème en premier lieu. – jxh

0

Le code que vous avez devrait fonctionner très bien, aussi longtemps que vous appuyez sur . Dans la plupart des systèmes, le programme reçoit des informations de manière linéaire. Si vous voulez faire écho à la touche immédiatement après qu'elle a été frappée, vous devrez changer la méthode d'entrée pour le programme. Sur beaucoup de systèmes, ce serait getch(), mais il peut y avoir d'autres exigences que vous devez satisfaire avant de pouvoir utiliser l'interface (ncurses nécessite une configuration supplémentaire, par exemple). Lorsque vous envoyez un écho aux données immédiatement après la frappe de la touche, vous devez vider la sortie d'une manière ou d'une autre. Si vous envoyez la sortie à stdout, un appel à fflush() fonctionnera. Si vous utilisez une commande de sortie spécifique au système, vous devrez peut-être appeler une routine d'actualisation de type ou de fenêtre.

0

Je me demande si une meilleure façon serait:

int ch; 
while((ch = getchar()) >= 0) 
{ 
    putchar(ch); 
} 

Alors si vous appelez ceci:

écho ceci est mon entrée | ./myprogram

il génèrerait l'ensemble stdin this is my input sans frapper la clé enter.