2013-07-12 5 views
1

Это очень простой вопрос, как эхо каждого символа, который я набираю в stdin для stdout? Я пытаюсь сделать это в течение долгого времени, и я пробовал много способов, и никто не работает хорошо. Лучшее, что я мог сделать, это получить то, что я набрал после окончания приложения.Как эхо stdin в stdout

Лучшее, что я сделал:

#include <stdio.h> 

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

     if(ch == EOF) break; 

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

Спасибо.

+0

Я использую затмение с mingw –

+0

Это так новичок ... Мне неловко спрашивать здесь что-то такое глупое, но я сам отказался от этого. –

+1

Не могли бы вы опубликовать то, что вы сделали до сих пор? – jh314

ответ

2

Вам нужно промыть stdout:

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

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

Я не думаю, что я полагаю, что это могло бы сделать что угодно, чтобы решить проблему. Но, может быть, я просто полностью не понял проблему в первую очередь. – jxh

0

код, который вы должны работать нормально, до тех пор, как вы нажмете . В большинстве систем программа будет вводиться в линию ориентированным образом. Если вы хотите эхо-ключ сразу после его нажатия, вам нужно будет изменить метод ввода для программы. На многих системах это будет getch(), но могут потребоваться другие требования, которые вам необходимо удовлетворить, прежде чем вы сможете использовать интерфейс (например, ncurses).

При повторном отображении данных сразу после нажатия клавиши вам потребуется как-то сбросить выход. Если вы отправляете вывод на stdout, тогда будет работать звонок fflush(). Если вы используете какую-либо системную команду вывода, вам может потребоваться вызвать какую-либо процедуру обновления окна или окна.

0

Интересно, лучше всего было бы:

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

Тогда, если вы звоните в этом:

эхо это мой вход | ./myprogram

он будет выводить весь стандартный ввод this is my input без нажав клавишу enter.