From 8091b93e681f0c9aedc01db65106fb664bc3f93f Mon Sep 17 00:00:00 2001 From: Roland W-H Date: Sat, 26 Mar 2022 13:30:43 +0000 Subject: [PATCH] added error checking and other tweaks --- src/bsrch.c | 9 ++++----- src/ceesort.c | 41 +++++++++++++++++++++++++++++++---------- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/bsrch.c b/src/bsrch.c index 736dbf4..8f5cb7f 100644 --- a/src/bsrch.c +++ b/src/bsrch.c @@ -1,8 +1,7 @@ #include "bsrch.h" -#include #include -#include +#include int bsrch(int target, int* arr, size_t n) @@ -10,7 +9,7 @@ int bsrch(int target, int* arr, size_t n) bool found = false; int start = 0, end = n - 1; if (arr[start] > target || arr[end] < target) return -1; - int mid = round((start + end) / (double)2); + int mid = (start + end) / 2; while (!found) { @@ -19,12 +18,12 @@ int bsrch(int target, int* arr, size_t n) else if (arr[mid] < target) { start = mid + 1; - mid = roundf((start + end) / (float)2); + mid = (start + end) / 2; } else if (arr[mid] > target) { end = mid - 1; - mid = roundf((start + end) / (float)2); + mid = (start + end) / 2; } } diff --git a/src/ceesort.c b/src/ceesort.c index 395fb53..9e27388 100644 --- a/src/ceesort.c +++ b/src/ceesort.c @@ -1,30 +1,51 @@ #include "bsrch.h" +#include +#include #include #include +bool isint(char* s) +{ + for (int i = 0; s[i]; i++) + { + if (s[i] == '-' && isdigit(s[i + 1])) continue; + if (!isdigit(s[i])) return false; + } + return true; +} + + int main(int argc, char** argv) { int* arr = malloc((argc - 1) * sizeof(int)); for (int i = 1; i < argc; i++) { + if (!isint(argv[i])) + { + puts("Sorry but arguments must be integers"); + return 1; + } arr[i - 1] = atoi(argv[i]); } - int target; + char target_str[16]; printf("Enter number to search for: "); - scanf("%d", &target); - int result = bsrch(target, arr, argc - 1); + scanf("%s", target_str); + while (!isint(target_str)) + { + printf("Sorry but you must enter a whole number, try again: "); + scanf("%s", target_str); + } + int target = atoi(target_str); - if (result != -1) - { - printf("Value found at index: %d\n", result); - } + int result = bsrch(target, arr, argc - 1); + if (result == -1) + puts("Value not found"); else - { - printf("Value not found\n"); - } + printf("Value found at index: %d\n", result); + free(arr); return 0; }