我想在Unix中实现$ cat的输入接收过程。在无限循环内,每当我按任意键时,就会在屏幕上打印相应的字母。如果按ctrl + d,循环将终止。
此TurboC代码正是我想要的:
#include<stdio.h>
#include<conio.h>
void main()
{
char ch;
while(1)
{
ch=getch();
if(ch==4)
break;
else
printf("%c",ch);
}
}
但是,每当我使用Python3时,都会产生问题。
from msvcrt import getch
while True:
ch=getch()
if ord(ch)==4:break
else: print(ch.decode(), end="")
当程序处于无限循环中时,它不打印任何内容,但我按的是键。最后,当我按ctrl + d时,所有以前输入的字符将一起打印。
如何在Python中实现呢?
问题在于,除非您使用@AlbinPaulsys.stdout.flush()
或print(ch.decode(), end="", flush=True)
按@AlbinPaul的建议进行刷新,否则Python中的输出将被缓冲。如果您使用std::cout
而不是,可能会遇到C ++的相同问题printf
。其背后的想法是每个输入/输出操作都非常昂贵,因此如果立即将每个字符一个一地输出到输出设备中,则会发现性能下降。将输出保留在内存中并仅不时刷新此累积的输出要便宜得多,因此大多数高级语言都选择缓冲输出。
如果您需要实时交互(例如您的情况),有时这种缓冲可能会带来问题。另一个可能臭名昭著的问题是竞争性编程:不要忘记刷新输出,否则会达到时间限制。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句