如何使用Golang开发简易计算器_Golang基础语法综合项目实战

5次阅读

用fmt.Scanln读整行+strings.Fields拆分可稳健解析输入;ParseFloat需防inf/nan/中文符号/溢出;switch必须含default和除零检查,并用TrimSpace清理运算符空白。

如何使用Golang开发简易计算器_Golang基础语法综合项目实战

go 语言本身没有内置的交互式计算器库,但用 fmt.Scanstrconv 和基础控制流就能在 50 行内写出一个支持加减乘除的命令行计算器——关键不是“能不能做”,而是怎么避免常见解析陷阱。

fmt.Scanf 读取带空格的输入时为什么总出错

直接用 fmt.Scanf("%f %s %f", &a, &op, &b) 看似合理,但用户输 3.5+2.13.5 + 2.1(多空格)就会失败。更稳妥的方式是先读整行,再切分:

  • fmt.Scanln(&input) 获取完整字符串
  • strings.Fields(input) 拆出非空字段,自动处理任意空格
  • 检查切片长度是否为 3,否则提示格式错误

strconv.ParseFloat 解析失败的三个典型原因

不是所有字符串都能转成浮点数,尤其要注意:

  • 用户输入 infnan 或空字符串,ParseFloat 会返回 Error
  • 输入含中文符号如“+”或“×”,ParseFloat 直接报 invalid syntax
  • 数字过大(如 1e400)可能溢出,需检查返回的 err == nil 而非只看值

switch 处理运算符时别忽略边界情况

Go 的 switch 默认无 fallthrough,但容易漏掉非法操作符的兜底:

立即学习go语言免费学习笔记(深入)”;

switch op { case "+":     result = a + b case "-":     result = a - b case "*":     result = a * b case "/":     if b == 0 {         fmt.Println("error: division by zero")         continue     }     result = a / b default:     fmt.Println("error: unsupported operator:", op)     continue }
  • 除零必须显式判断,Go 不会 panic
  • default 分支不能省,否则输 %^ 会静默执行上一个 case
  • 运算符建议用 strings.TrimSpace(op) 清理首尾空白,防止 " / " 匹配失败

真正难的不是写完四则运算,而是让用户输错一次就明白哪里错了——比如把 3.14.15 当作数字,或者把空行当有效输入。这类细节没加校验,程序看起来能跑,实际一用就崩。

text=ZqhQzanResources