AfanasevGad7

This is a task for our favourite professor
git clone git://git.stellar-nexus.ru/AfanasevGad7
Log | Files | Refs

commit 7d3531f6c7a304270489d67170110f439c60a7a8
parent a7f23a61c5defbd23d8231dcd3c41ab1c1c39dd3
Author: Plat <plat@stellar-nexus.ru>
Date:   Wed,  5 Nov 2025 22:22:04 +0000

Attempt numero 3

Diffstat:
Alibutil/estrtod.c | 18++++++++++++++++++
Mrb.c | 22++++++++--------------
Mutil.h | 2++
3 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/libutil/estrtod.c b/libutil/estrtod.c @@ -0,0 +1,18 @@ +/* See LICENSE file for copyright and license details. */ +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> + +#include "../util.h" + +double +estrtod(const char *s) +{ + char *end; + double d; + + d = strtod(s, &end); + if (end == s || *end != '\0') + eprintf("%s: not a real number\n", s); + return d; +} diff --git a/rb.c b/rb.c @@ -91,18 +91,17 @@ search(Node *root, int val) } int -main(void) +main(int argc, char *argv) { + argv0 = argv[0]; + if (argc != 3) + usage(); + unsigned int data_limit = estrtod(argv[1]); + Node *root = NULL; - int data_limit; - printf("Element count: "); - if (!scanf("%d", &data_limit)) /* scanf sucks ass */ - eprintf("scanf:"); - if (data_limit <= 0) - eprintf("scanf sucks ass"); - for (int k = 1; k <= data_limit; ++k) { + for (unsigned int k = 1; k <= data_limit; ++k) { root = add(root, k); SET_COLOR(root, BLACK); } @@ -111,12 +110,7 @@ main(void) for (search_value = attempt = 0; search_value < 1 || search_value > data_limit; ++attempt) { if (attempt) printf("Impossible value\n"); - printf("Value: "); - if (!scanf("%d", &search_value)) /* scanf sucks ass */ - eprintf("scanf:"); - if (search_value <= 0) - eprintf("scanf sucks ass"); - + search_value = estrtod(argv[2]); } Node *s = search(root, search_value); diff --git a/util.h b/util.h @@ -20,3 +20,5 @@ char *estrdup(const char *); void enprintf(int, const char *, ...); void eprintf(const char *, ...); void weprintf(const char *, ...); + +double estrtod(const char *);