过早输入会导致故障吗?

Can giving input too early cause glitches?

提问人:Riemann 提问时间:7/30/2023 最后编辑:Riemann 更新时间:7/30/2023 访问量:43

问:

假设我的 Python 代码如下所示:

While(True):
    Var = input()
    Do something

我注意到,当我从 Windows 提示符运行它时,我可以在仍在运行时提供输入。例如:Do something

  1. 如果我在 期间按回车键,那么下次询问该输入时,会自动分配空输入。Do somethingVar
  2. 如果我在 期间按其他内容(如 ),那么下次询问输入时,我会在提示中看到这一点。所以它说,我仍然可以选择删除它,向它添加一些东西或按回车键。1Do something1
  3. 如果也可以使这些组合。如果我在 期间按 、 、 ,那么接下来的两个循环将自动以 开始。1enter1enterDo somethingVar = 1

这似乎有点奇怪,而且可能是无意的。如果我在期间提供某些输入,算法是否有可能表现不同/奇怪/未定义?Do something

(请注意,使用Do somethingVar)

python windows 循环 输入 undefined-behavior

评论

0赞 Michael Butscher 7/30/2023
这是正常行为。它不会影响不与标准输入或控制台应用程序交互的代码。

答:

2赞 alexis 7/30/2023 #1

这绝对是有意为之的。它不是特定于 Python 的,而是终端输入的工作方式:无论您输入什么,都会进入缓冲区,并保留在那里,直到正在运行的程序选择读取它。然后它将严格按顺序读取 - 只要您在命令行键入,您的某些输入就不会被无序读取。而且输入缓冲区非常大,因此在输入丢失或被拒绝之前,您必须进行大量预输入。

实际上,在多个地方都有缓冲区。在按 Enter 键之前,您键入的内容甚至不会传递到您的程序中——这是终端界面的行缓冲。但我相信这已经回答了你的问题。