File: Stare vježbe/vjezbe08/48__kalkulator.c

  1. /*
  2.   48__kalkulator.c
  3.   -----
  4.   Primjer jednostavnog infix kalkulatora.
  5.   Napomena: U kalkulatoru nije implementirano postivanje standardnih
  6.   prioriteta matematickih operatora, pa se prioriteti moraju
  7.   "rucno" definirati upotrebom zagrada.
  8. */
  9.  
  10. #include <stdio.h>
  11.  
  12. float kalkulator(void) {
  13. char op, slijed;
  14. float odgovor, novi_broj;
  15. odgovor = 0;
  16. op ='+';
  17. while ((op != '=' ) && (op != ')' )) {
  18. slijed = getchar();
  19. if (slijed== '(')
  20. novi_broj = kalkulator();
  21. else {
  22. /* Pomocu funkcije ungetc vracamo ucitani char natrag na "mjesto"
  23.   od kuda je on bio uzet.
  24.   (stdin predstavlja svojevrsno "spremiste" gdje se nalaze ulazni
  25.   podaci koje je korisnik unio s tastature) */
  26. ungetc(slijed, stdin);
  27. scanf("%f", &novi_broj);
  28. }
  29. switch (op) {
  30. case '+': odgovor += novi_broj; break;
  31. case '-': odgovor -= novi_broj; break;
  32. case '*': odgovor *= novi_broj; break;
  33. case '/': odgovor /= novi_broj; break;
  34. }
  35. op = getchar();
  36. }
  37. return odgovor;
  38. }
  39.  
  40. int main() {
  41. printf("Rezultat: %f\n", kalkulator());
  42.  
  43. return 0;
  44. }
  45.