gpt4 book ai didi

python - 为什么以下代码在 C 和 Python 中给出不同的输出?

转载 作者:太空宇宙 更新时间:2023-11-03 20:05:08 28 4
gpt4 key购买 nike

我想在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 中实现它?

最佳答案

问题是 Python 中的输出会被缓冲,除非你用 sys.stdout.flush() 刷新它。或print(ch.decode(), end="", flush=True)正如@AlbinPaul 所建议的。如果你使用std::cout,你可能会在C++中面临同样的问题。而不是printf 。其背后的想法是每个输入/输出操作都非常昂贵,因此如果立即将每个字符逐一输出到输出设备中,您会发现性能下降。将输出保留在内存中并仅时不时地刷新此累积输出要便宜得多,因此大多数高级语言选择缓冲输出。

如果您需要实时交互(就像您的情况一样),有时这种缓冲可能会带来问题。另一个可能的臭名昭著的问题是竞争性编程:不要忘记刷新你的输出,否则你就会达到时间限制。

关于python - 为什么以下代码在 C 和 Python 中给出不同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59008968/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com