diff --git a/cv3/program.c b/cv3/program.c index 9f39b2b..12e1807 100644 --- a/cv3/program.c +++ b/cv3/program.c @@ -1,9 +1,9 @@ -#include #include #include #include +#include -#define STACK_SIZE 100 +#define STACK_SIZE 10 struct stack { float values[STACK_SIZE]; @@ -11,17 +11,29 @@ struct stack { }; void push(struct stack* stack,float values){ - assert(stack->size < STACK_SIZE); - stack->values[stack->size] = values; - stack->size += 1; + if(stack->size < 10){ + stack->values[stack->size] = values; + stack->size += 1; + } + else{ + printf("full stack\n"); + exit(0); + + } } float pop(struct stack *stack){ - assert(stack->size > 0); - float values = stack->values[stack->size-1]; - stack->size -= 1; - return values; + if(stack->size > 0){ + float value = stack->values[stack->size-1]; + stack->size -= 1; + return value; + } + else{ + printf("not enough operands\n"); + exit(0); + } } + void print_stack(struct stack *stack){ int i; int len = stack->size - 1; @@ -30,9 +42,8 @@ void print_stack(struct stack *stack){ } if(stack->size != 0){ printf("%0.2f ", stack->values[i]); - } - printf("\n"); - + printf("\n"); + } } @@ -40,44 +51,55 @@ int main() { struct stack mystack; memset(&mystack, 0, sizeof(struct stack)); int i = 0; - float z; - for(i = 0; i < 10000; i++){ + for(i = 0; i < 100; i++){ + char line[10]; char *x = fgets(line, 10, stdin); float r = 0; - - if(!isdigit(line[0]) && line[0] != '+' && line[0] != '*' && line[0] != '/' && line[0] != '-'){ - printf("no input"); - return 0; - } + float z = 0; - if(line[0] == '+'){ - r = pop(&mystack) + pop(&mystack); - } - else if(line[0] == '-'){ - z = pop(&mystack); - r = pop(&mystack) - z; - } - else if(line[0] == '*'){ - r = pop(&mystack) * pop(&mystack); - } - else if(line[0] == '/'){ - z = pop(&mystack); - if(z != 0.0){ - r = pop(&mystack) / z; + if(line[1] != 0 && x != NULL){ + + + if(!isdigit(line[0]) && line[0] != '+' && line[0] != '*' && line[0] != '/' && line[0] != '-'){ + printf("bad input\n"); + return 0; + } + + if(line[0] == '+'){ + r = pop(&mystack) + pop(&mystack); } + else if(line[0] == '-'){ + z = pop(&mystack); + r = pop(&mystack) - z; + } + else if(line[0] == '*'){ + r = pop(&mystack) * pop(&mystack); + } + else if(line[0] == '/'){ + z = pop(&mystack); + if(z == 0){ + printf("division by zero\n"); + return 0; + } + else { + r = pop(&mystack) / z; + } + } + + + else { + r = strtof(line,&x); + } + + push(&mystack,r); + print_stack(&mystack); } - - else { - r = strtof(line,&x); - } - - push(&mystack,r); - print_stack(&mystack); - + else{ + printf("no input\n"); + return 0; + } } - - - + return 0; }