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

德布塔努·古普塔(Debtanu Gupta)

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

德米特里·库兹米诺夫(Dmitry Kuzminov)

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当其他成员设置为新值时,C联合成员将给出特定/错误值。为什么在C中的以下代码中输出此结果?

为什么以下代码在C ++中是非法的

为什么以下语句在Java中给出不同的输出?

为什么以下C语言代码给出此输出?

为什么我在以下代码中使用的相同 Magic 方法生成的输出与预期不同

为什么以下代码给我不同的输出?(方根大数)

以下代码的输出是什么,为什么?

以下代码段的输出是什么,为什么?

以下代码在C中做什么?

为什么以下代码的输出是 x=0 x=20?

为什么我将nan作为以下代码的输出?

为什么以下代码的输出是 4 而不是元组 (4,)?

为什么以下代码会有不同的结果?

在CSS中编写以下代码时,为什么输出没有变化?

c ++中的预处理程序指令:以下代码的输出是什么?

为什么Java编译器在以下代码中为LinkedListDescendingIterator给出“错误:找不到符号”?

为什么我在以下代码中在 Python3 中收到 KeyError?

为什么警报框在以下代码中不断触发?

为什么在以下代码中得到NullPointerException?

以下代码的输出是什么

为什么在python中运行以下代码片段时会打印20

为什么以下代码不终止?

为什么以下代码无法编译?

为什么以下代码会运行?

为什么以下代码显示错误?

为什么以下代码没有给出大约0.75的返回概率?

以下代码中的错误是什么?(Python 2.7,矩阵)

为什么我的C ++代码在ideone和Codeforces自定义测试中给出2个不同的输出?

为什么我的代码仅通过注释c ++中的单个打印cout语句来给出不同的输出?