Тема: Стефан Кочан, вправа 6.4, простий калькулятор
Вітаю форумчани!
Завдання вправи полягає в тому, що треба написати простий калькулятор, який би оперував із змінними типу int.
Я трошки ускладнив завдання і написав програму для роботи зі змінними типу float.
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define MAX 1024
static char line[MAX];
static float a, b;
int getline(void);
int input(void);
int main(int argc, char *argv[])
{
while(getline()){
switch(input()){
case 1:
printf("%f\n", a + b);
break;
case 2:
printf("%f\n", a - b);
break;
case 3:
printf("%f\n", a / b);
break;
case 4:
printf("%f\n", a * b);
break;
default:
printf("Unknown operation\n");
break;
}
}
return 0;
}
int getline(void){
int c, i;
for(i = 0; i < MAX-1 && (c = getchar()) != '\n' && c != EOF; i++){
line[i] = c;
}
if(c == EOF)
return 0;
line[i] = '\n';
line[i++] = '\0';
return i;
}
int input(void){
int i, j, ns, op, negative;
//op:
//0 = wrong operation
//1 = plus
//2 = minus
//3 = divide
//4 = times
//negative:
//for minus sign
//ns:
//0 = operator a is free
//1 = operator b is free
char toconv[512];
i = j = ns = op = negative = 0;
while(line[i] != '\0'){
if(isdigit(line[i])){
j = 0;
while(isdigit(line[i]) || line[i] == '.'){
toconv[j] = line[i];
i++;
j++;
}
toconv[j] = '\0';
printf("toconv: %s\n", toconv);
if(ns){
b = atof(toconv);
if(negative){
b *= -1;
negative = 0;
}
printf("b = %f\n", b);
ns = 0;
} else {
a = atof(toconv);
if(negative){
a *= -1;
negative = 0;
}
printf("a = %f\n", a);
ns = 1;
}
} else {
switch(line[i]){
case '+':
op = 1;
printf("+: there is addition\n");
break;
case '-':
if(isdigit(line[i+1])){
printf("-: there is negative number\n");
negative = 1;
}
else{
printf("-: there is subtraction\n");
op = 2;
}
break;
case '/':
printf("/: there is dividing\n");
op = 3;
break;
case '*':
printf("*: there is multiplication\n");
op = 4;
break;
case ' ':
break;
default:
printf("Wrong operation: %c\n", line[i]);
op = 0;
break;
}
}
i++;
}
return op;
}