From 38d2c7dc751d184c89ea00be2aec8973d7401918 Mon Sep 17 00:00:00 2001 From: Luciano Date: Sun, 29 Mar 2026 14:57:00 -0700 Subject: [PATCH] add eval flag --- README.md | 10 ++++++++++ main.c | 13 ++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 54463f1..624938b 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,16 @@ Where `cc` is our C compiler e.g. `gcc`, `clang`, `zig cc`. ## How to Use +### Single Eval + +Run the executable with `-e` flag to evaluate a single expression and exit. + +```sh +❯ ./calc -e "3.14**2" +9.8596 +``` + +### REPL Run the executable `calc` to be greeted with the following prompt: `calc>` diff --git a/main.c b/main.c index a6134b0..465b4e0 100644 --- a/main.c +++ b/main.c @@ -25,11 +25,22 @@ #define INPUT_MAX 1024 -int main(void) +int main(int argc, char **argv) { char buf[INPUT_MAX]; calc_FormatKind fmt = CALC_FORMAT_DECIMAL; + // -e "expr": evaluate a single expression and exit + if (argc == 3 && strcmp(argv[1], "-e") == 0) { + double result = calc_eval(argv[2]); + if (isnan(result)) { + fprintf(stderr, "error: invalid expression\n"); + return 1; + } + printf("%s\n", calc_format_result(result, fmt)); + return 0; + } + printf("calc> "); fflush(stdout); -- 2.25.1