- 0X1F 读写终端
- 继续前一节内容中的问题。写一个脚本,从命令行读入圆柱体的高和半径,返回其体积。圆柱体的计算公式是圆周率乘以半径的平方再乘以高。
- 我将大致介绍编程思路并给出源码。如果有任何细节问题不明白,请翻看之前的内容,使用搜索引擎查找。确认无法解自己短期内解决后可以在评论区留言。
- 我这里给出的思路不一定是最优也不一定最好。如果你觉得我的代码不够好,应该尝试自己写一个更好的版本。
- 整个程序按照要求大致可以分为获取输入值,计算体积,输出体积。
- 由于计算体积和输出体积的代码相对简单,不单独写一个函数。
- 获取输入值和把字符串转换为数字封装为一个函数。
- 定义获取输入的数值的函数。
- 首先我们应该明白输入的数值会以字符串形式传回,我们需要进行类型转换。
- 其次我们应当在用户输入前输出一些文字作为提示,防止输入错误的内容。
- 最后,但是很重要的一点,如果用户输入了不能转化为数字的字符串。我们的程序不能因此崩溃。我们要设置相应的处理措施。比如,给返回值设置默认值。当输入值非法的时候,返回0。
- 获取输入的函数:
require('io') function getInput() local temp,r,h print('Please input radius:') temp=tonumber(io.read()) if temp==nil then r=0 else r=temp end print('Please input height:') temp=tonumber(io.read()) if temp==nil then h=0 else h=temp end return r,h end
- 定义好getInput函数之后写,脚本的其余部分。由于定义好了这个函数,所以剩下的部分会相对简洁:
require('math') r,h=getInput() V=math.pi*r^2*h print('The volume is '..V)
- 现在保存脚本文件,试运行。
- 这个程序还有很多可以优化、改进、拓展的地方。我将选择一点作为下一节的主题——输出数据的格式。这里我们会得到一个尽量精确的输出数值。但是如果我希望仅仅显示小数点后两位应该怎么做?这就是下一节的内容。
- 0X21 格式化输出