2012-11-20 19 views
0

当我运行该函数并键入一个字符串时,我看到在标准输出中打印回来的字符串。我相信我有一个缓冲区的问题,但我似乎无法弄清楚这一点。调用fgets的结果在字符串打印到标准输出

+4

当你说“打印回标准输出”时,你的意思是终端在键入数据时回显数据吗? –

+0

@WilliamPursell,编号字符串在我输入时显示,但按Enter键后也会再次显示。 – Alex

回答

0

当您在控制台中键入字符时,它们会回显给您。当您从stdin读取字符时,仍会读取这些字符。

或者,您可以将程序的输出传送到您自己的程序中,或将文件重定向到标准输入。在这两种情况下,字符不会附和道:

echo Program output | ./myprog 

或:

./myprog < fileinput.txt 

编辑 - 听起来就像是一个终端问题。

你还没有说明你使用的是什么系统,或者你如何与它接口,但是我可以通过使用PuTTY通过SSH连接到系统来获得这种行为。

我改变终端设置强制“本地回声”和“本地线路编辑”。然后,每当我按下回车键时,我都会回应这一行。显然只有其中一个应该开启。最好是“本地回声”。

+0

当我输入回声时,我很好,但输入后输入字符串。 – Alex

+0

然后我认为这是您的终端设置。我会修改我的答案。 – paddy

+0

我意识到这不是一个真正的问题,我只是认为有一个问题,因为代码的格式。感谢您的答复。 – Alex

1

当你运行它,如果你看到:

./program 
input<CR> 
input 
<prompt> 

然后你提供的代码是不负责这样做。使用一些调试语句或调试器来确定回声来自哪里,因为这不是fgets所做的。

如果您看到:

./program 
input<CR> 
<prompt> 

然后就是刚刚终端将如何工作。除非您禁用该功能(用于输入密码),否则它们会在您键入时回显文本。

+0

这也回答了我的问题。我给了@paddy的答案,因为他是第一个回答我回答的问题。 – Alex

0

这样做的一个常见原因是在您的终端(推测这是一个仿真器)和OS终端驱动程序中都启用了回显功能。假设你使用Unix,如果你这样做,问题就消失了:

stty -echo 

运行你的程序之前?

相关问题