io – 如何让lua顺序运行
我正在通过
this site学习Lua.我在教程的最开始,我正在尝试这个程序(输入一个数字,x,它返回x!):
-- defines a factorial function function fact (n) if n == 0 then return 1 else return n * fact(n-1) end end print("enter a number:") a = io.read("*number") -- read a number print(fact(a)) 但是,当我运行它时,io.read似乎出现在提示之前.我在记事本控制台中运行它,如下所示: "C:Program FilesLua5.1lua.exe" "PathTofactorial.lua" 输出(看似)是空白但如果我输入一个数字,则该功能运行. 5 enter a number: 120 虽然这不是一个很大的问题,但我只能想象在创建之前使用的变量所带来的问题.那么,在阅读输入之前,如何让这个程序提示输入数字呢? 解决方法
发生的事情并不是代码运行不正常,而是提示没有立即显示给终端.
在内部,您输出的任何内容都由操作系统存储在IO缓冲区中.定期清空缓冲区,并在终端上显示其内容(刷新).在大多数系统上,默认情况下终端是行缓冲的,这意味着每次你写一个行尾字符 – print()自动执行 – 它会被刷新;但是,在某些系统上,它默认为完全缓冲,这意味着它只在填满时自动刷新. 有两种方法可以解决这个问题.如果要对文件上的所有IO操作禁用或更改缓冲(为了这些目的,终端计为文件),可以使用 另一种方法是手动刷新缓冲区,这在您希望立即显示某些特定输出时非常有用,但不希望普遍禁用输出缓冲.您可以使用 -- no newline,so even on line-buffered systems this may not -- display immediately io.write("Enter a number: ") -- so we force it to io.flush() 请注意, (为什么要干扰缓冲?因为它更快 – 将数据写入终端或文件是昂贵的,写一个大的东西比写很多小东西要快.在大多数情况下,如果事情不重要也没关系在代码运行的瞬间写入,因此操作系统将要写入的数据保存在缓冲区中,然后在缓冲区填满时进行单次大写操作.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |