如何将stdin回显到stdout

时间:2013-07-12 01:59:49

标签: c stdout stdin

这是一个非常简单的问题,如何将我在stdin中输入的每个字符回显到stdout?我试图做很长一段时间,我尝试了很多方法,没有人运作良好。我能做的最好的事情是在申请结束后得到我输入的内容。

我做的最好的是:

#include <stdio.h>

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

        if(ch == EOF) break;

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

感谢。

3 个答案:

答案 0 :(得分:2)

您需要清空stdout

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

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

答案 1 :(得分:0)

只要您点击,您所拥有的代码就可以正常运行。在大多数系统中,程序将以面向行的方式获得输入。如果要在击中后立即回显键,则需要更改程序的输入方法。在许多系统上,这将是getch(),但在使用界面之前可能还需要满足其他要求(例如,ncurses需要一些额外的设置)。

在按下键后立即回显数据时,您将需要以某种方式刷新输出。如果您要将输出发送到stdout,则可以调用fflush()。如果您使用某些特定于系统的输出命令,则可能需要调用某种类型或窗口刷新例程。

答案 2 :(得分:0)

我想知道是否会有更好的方式:

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

然后,如果你这样称呼:

  回声这是我的输入| ./myprogram

它会输出整个标准this is my input而不会点击enter键。