From 2aca08a7665b5650dc344bd71f9ad1bcae42f044 Mon Sep 17 00:00:00 2001 From: Marat Izmailov Date: Mon, 7 Oct 2024 12:43:15 +0000 Subject: [PATCH] Update cv3/program.c --- cv3/program.c | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/cv3/program.c b/cv3/program.c index 1c85e15..9f647d0 100644 --- a/cv3/program.c +++ b/cv3/program.c @@ -11,32 +11,41 @@ struct stack { int size; }; - +// Function declarations void push_stack(struct stack* stack, float value); float pop_stack(struct stack* stack); void print_stack(struct stack* stack); int is_number(const char* str); - int main() { struct stack mystack; - memset(&mystack, 0, sizeof(struct stack)); + memset(&mystack, 0, sizeof(struct stack)); // Initialize the stack char input[50]; while (1) { printf("Enter a number or an operator (+, -, *, /): "); if (!fgets(input, sizeof(input), stdin)) { - break; + break; // Exit on EOF } - + // Remove trailing newline character input[strcspn(input, "\n")] = 0; + // Check if the input is empty + if (strlen(input) == 0) { + printf("no input\n"); + break; + } + if (is_number(input)) { - + // Convert input to float and push onto stack float value = atof(input); push_stack(&mystack, value); } else if (strlen(input) == 1 && strchr("+-*/", input[0])) { - + // Perform operation + if (mystack.size < 2) { + fprintf(stderr, "Error: Not enough values in stack.\n"); + exit(EXIT_FAILURE); + } float b = pop_stack(&mystack); float a = pop_stack(&mystack); float result; @@ -68,28 +77,28 @@ int main() { exit(EXIT_FAILURE); } - + // Print the current stack print_stack(&mystack); } return 0; } - +// Push a value onto the stack void push_stack(struct stack* stack, float value) { - assert(stack->size < STACK_SIZE); + assert(stack->size < STACK_SIZE); // Ensure there's space in the stack stack->values[stack->size] = value; stack->size += 1; } - +// Pop a value from the stack float pop_stack(struct stack* stack) { - assert(stack->size > 0); + assert(stack->size > 0); // Ensure there's something to pop stack->size -= 1; return stack->values[stack->size]; } - +// Print the contents of the stack void print_stack(struct stack* stack) { for (int i = 0; i < stack->size; i++) { printf("%.2f ", stack->values[i]); @@ -97,7 +106,7 @@ void print_stack(struct stack* stack) { printf("\n"); } - +// Check if the input string is a valid number int is_number(const char* str) { char* endptr; strtod(str, &endptr);