C Program: Trying to use getchar/putchar exclusively to build a simple calculator

Hi guys,

I'm trying to build a basic calculator using only getchar and putchar (printf is fine for displaying error messages). It very simply takes one number, an operand, and then another number, echo's back the information, and then returns the correct answer. I also need to error check for negative numbers.

With what I have so far, I can input something like "22 + 44", and the program will work correctly, but if I use no spaces, or more than one space, it gets all messed up. Also, towards the end, I used printf's simply because I just wanted to see the darn program working! Eventually, I will need to use putchar's...I assume it is similar to what I did with the getchar's, but I'm still a bit hazy there.

Thanks for looking!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>

int add(int input1,char operand, int input2);
int subtract(int input1,char operand, int input2);
int mod(int input1,char operand, int input2);
int multiply(int input1,char operand, int input2);
int divide(int input1,char operand, int input2);

int main()
{

    int answer = 0;
    int ch = 0;
    int input1 = 0;
    char operand = 0;
    int input2 = 0;
    int function = 0;

    printf("\nPlease enter a calculation to be made.\n");

    while (((ch = getchar()) != ' ') && (ch != '\n')){

    if (ch == '-') {
        printf("\nError: no negatives allowed.\n");
    }

    else if (!isdigit(ch)){
    printf("\nError: number not inputted (first number).\n");
    }

    else {
        input1 = (input1 * 10) + (ch - '0');
        }
}

    while (((ch = getchar()) != ' ') && (ch != '\n')){

        switch(ch){

        case '+':
        operand = '+';
        break;

        case '-':
        operand = '-';
        break;

        case '%':
        operand = '%';
        break;

        case '*':
        operand = '*';
        break;

        case '/':
        operand = '/';
        break;

        default:
        printf("Error: input is not one of the allowed operands.");
        break;

        }

    }

    while (((ch = getchar()) != ' ') && (ch != '\n')){


    if (ch == '-') {
        printf("\nError: no negatives allowed.\n");
    }

    else if (!isdigit(ch)){
    printf("\nError: number not inputted (second number).\n");
    }

    else {
        input2 = (input2 * 10) + (ch - '0');
        }
}

printf("%d", input1);
printf("%c", operand);
printf("%d", input2);

putchar('=');

if (operand == '+'){
answer = add(input1, operand, input2);
printf("%d", answer);
}
else if (operand == '-'){
answer = subtract(input1, operand, input2);
printf("%d", answer);
}
else if (operand == '%'){
answer = mod(input1, operand, input2);
printf("%d", answer);
}
else if (operand == '*'){
answer = multiply(input1, operand, input2);
printf("%d", answer);
}
else if (operand == '/'){
answer = divide(input1, operand, input2);
printf("%d", answer);
}

    return 0;
}

int add(int input1,char operand, int input2){

return input1 + input2;

}

int subtract(int input1,char operand, int input2){

return input1 - input2;

}

int mod(int input1,char operand, int input2){

return input1 % input2;

}

int multiply(int input1,char operand, int input2){

return input1 * input2;

}

int divide(int input1,char operand, int input2){

return input1/input2;

}
Last edited on
Topic archived. No new replies allowed.