一个零依赖、跨平台的 C++ 计算器,使用现代 C++(C++17)编写。
- TUI(终端界面):在终端中运行时默认进入,全屏计算器,边输入边实时显示结果,就像 Windows 计算器一样。
- CLI(命令行):交互式 REPL,另有单行求值模式与管道/批量模式。
- 运算符:
+ - * / % ^以及括号( ) - 隐式乘法:
2(3+4)、2pi、2sqrt(3) - 标准运算符优先级,
^为右结合(2^3^2= 512),-2^2= -4 - 函数:
sin cos tan asin acos atan sinh cosh tanh sqrt cbrt exp ln log log10 log2 abs floor ceil round trunc sign pow min max mod atan2 hypot - 整数 / 组合数学:
gcd lcm fact ncr npr - 开方与取模:
root(n, x)(x 的 n 次方根)、pmod(a, b)(结果恒非负的取模) - 乘方:
^(例如2^10),右结合且支持负号指数(2^-3) - 分组:括号
( ),并支持隐式乘法(2(3+4)、2pi) - 常量:
pi e tau phi,以及ans(上一次的计算结果)
TUI 会绘制一排可点击的计算器按键(数字、运算符、( )、^、gcd、
root、pi、=、退格、清空)。你可以用鼠标点击按钮,也可以直接打字。
鼠标输入在 Unix/macOS 终端使用 SGR 协议,在 Windows 上使用 ReadConsoleInput,
因此在 Windows 控制台 / Windows Terminal 中点击同样有效。
- 实时预览:当表达式只输入了一半或语法不完整时,结果显示为
= ...而不是报错, 只有当表达式合法时才会“锁定”显示结果。
无需任何外部依赖库。
cd calc
cmake -S . -B build
cmake --build build
# 或者更简单,直接用 g++:
g++ -std=c++17 -O2 src/*.cpp -o calc使用 Visual Studio(MSVC)+ CMake:
cd calc
cmake -S . -B build
cmake --build build --config Release使用 MinGW-w64:
g++ -std=c++17 -O2 src/*.cpp -o calc.exeTUI 使用 ANSI 转义码;Windows 10 及以上控制台原生支持,旧版 Windows 也能运行, 但可能不显示颜色。
安装 mingw-w64,然后直接编译或使用辅助脚本:
# 直接编译
x86_64-w64-mingw32-g++ -std=c++17 -O2 -static src/*.cpp -o calc-x64.exe
i686-w64-mingw32-g++ -std=c++17 -O2 -static src/*.cpp -o calc-x86.exe
# 或使用辅助脚本
./build-win.sh-static 参数会把 C++ 运行时静态链接进 exe,因此生成的 .exe 仅依赖系统自带的
KERNEL32.dll / msvcrt.dll,无需额外携带 DLL。
# TUI(交互式,实时结果)——在终端中运行时默认进入
./calc
# 强制指定模式
./calc --tui
./calc --cli
# 求值并退出(单行模式)
./calc --expr "2 + 3 * 4"
./calc "sqrt(2) ^ 2"
# 从文件 / 管道批量计算
./calc < expressions.txt
echo "1+1" | ./calc| 按键 | 功能 |
|---|---|
| 可打印字符 | 在光标处插入 |
← → / Home End |
移动光标 |
Backspace / Delete |
删除字符 |
↑ ↓ |
翻阅历史记录 |
Enter |
用结果替换当前表达式(可继续链式计算) |
Esc / Ctrl-C |
退出 |
在 > 提示符后输入表达式。help 查看功能说明,exit 退出。
变量 ans 始终保存上一次的计算结果。
程序以 UTF-8 输出中文界面与报错信息。
- Linux / macOS:终端默认即为 UTF-8,无需额外设置。
- Windows:程序启动时会自动将控制台代码页切换为 UTF-8(65001),退出时还原; 若仍有乱码,请将控制台字体改为 TrueType 字体(如 Consolas / Microsoft YaHei Mono), 或使用 Windows Terminal / PowerShell。
- 函数名、常量名(
sin、pi等)与运算符仍使用英文,这是表达式语法的通用做法。
编译好的可执行文件(Windows 64/32 位 .exe 与 Linux 可执行文件)发布在
Releases 页面,仓库本身只存放源码。