Najprostszy kalkulator w C - problem z kompilacją

Witam, jestem bardzo początkującym “programista”… Chciałbym się dowiedzieć co w tym kodzie jest nie tak.

#include

int main() {


   printf("Prosty kalkulator\n 

           -------------------------------------------------------------\n\n

           Wpisz działanie: ");

   float a,b;

   char znak;

   float Suma,Roznica,Iloczyn,Iloraz;

   scanf("%f",&a);

   scanf("%c",&znak);

   scanf("%f",&b);

   if(znak == '+') 

     {

      Suma=a+b;

      printf("Wynik dzialania: %f",Suma);

     }

   if(znak == '-') 

     {

      Roznica=a-b;

      printf("Wynik dzialania: %f",Roznica);

     }

   if(znak == '*') 

     {

      Iloczyn=a*b;

      printf("Wynik dzialania: %f",Iloczyn);

     } else {

      Iloraz=a/b;

      printf("Wynik dzialania: %f",Iloraz);	

     }     

   return 0;

}
#include

int main() {


   printf("Prosty kalkulator\n");

   printf("-------------------------------------------------------------\n\n");

   printf("Wpisz działanie: ");

   float a,b;

   char znak;

   float Suma,Roznica,Iloczyn,Iloraz;

   scanf("%f",&a);

   scanf("%c",&znak);

   scanf("%f",&b);

   if(znak == '+')

     {

      Suma=a+b;

      printf("Wynik dzialania: %f",Suma);

     }

   else if(znak == '-')

     {

      Roznica=a-b;

      printf("Wynik dzialania: %f",Roznica);

     }

   else if(znak == '*')

     {

      Iloczyn=a*b;

      printf("Wynik dzialania: %f",Iloczyn);

     }

   else

     {

      Iloraz=a/b;

      printf("Wynik dzialania: %f",Iloraz);   

     }     

   return 0;

}

Twój program nie sprawdza wszystkich możliwości związanych ze znakami. Zapomniałeś dwa razy o “else if”. Powinno być tak:

if(znak == '+') 

     {

      Suma=a+b;

      printf("Wynik dzialania: %f",Suma);

     } 

   else if(znak == '-') 

     {

      Roznica=a-b;

      printf("Wynik dzialania: %f",Roznica);

     }

    else if(znak == '*') 

     {

      Iloczyn=a*b;

      printf("Wynik dzialania: %f",Iloczyn);

     } 

    else 

    {

      Iloraz=a/b;

      printf("Wynik dzialania: %f",Iloraz);	

     }

Wersja jeszcze lepsza, która pozwoli również rozwiązać problem wpisania przez użytkownika nieobsługiwanego znaku. Bo w Twojej wersji wpisanie czegokolwiek, co nie jest plusem, minusem albo gwiazdką powoduje podzielnie. Tak się nie robi :slight_smile: Gdy mamy wiele możliwości wyboru, zamiast if…else wygodniej użyć konstrukcji switch…case…default, o tak:

switch(znak) 

   {

    case '+':

     {

      Suma=a+b;

      printf("Wynik dzialania: %f",Suma);

      break;

     } 

    case '-':

     {

      Roznica=a-b;

      printf("Wynik dzialania: %f",Roznica);

      break;

     }

    case '*':

     {

      Iloczyn=a*b;

      printf("Wynik dzialania: %f",Iloczyn);

      break;

     } 

    case '/':

    {

      Iloraz=a/b;

      printf("Wynik dzialania: %f",Iloraz);	

      break;

     }

    default:     

    {

      printf("Nieznane dzialanie!");

      break;

    }

   }

Powiedz mi jeszcze jedno: czemu masz 4 zmienne: Suma, Roznica, Iloczyn, Iloraz, skoro później 3 z nich nie wykorzystujesz? Nie lepiej mieć jedną zmienną, np. wynik i do niej podstawić działanie w zależności od znaku. Wiem, że pamięć droga nie jest, ale po co robić sobie bałagan w programie :slight_smile:

Aha: Wygodniej jest pisać nazwy zmiennych małymi literami, natomiast funkcji wielkimi. Żeby na pierwszy rzut oka można było ocenić, co jest czym.

wiem wiem…miałem na początku jedną zmienna przechowywująca wynik ale troche kombinowałem i zostało tak… ale to nie ma znaczenia. Chciałem wiedzieć dlaczego nie działa…

Jeszcze jedno… bo ja myslełem że jest w C coś takiego:

if (warunek) operacja;

i jeżeli nie jest spełniony to przechodzi dalej gdzie mam kolejny if …

Złączono Posta : 18.11.2007 (Nie) 0:47

Przerobiłem na switch. Nadal nie działa…

#include

int main() {


   printf("Prosty kalkulator\n 

           -------------------------------------------------------------\n\n

           Wpisz działanie: ");

   float a,b;

   char znak;

   float wynik;

   scanf("%f",&a);

   scanf("%c",&znak);

   scanf("%f",&b);

   switch(znak)

   {

    case '+':

     {

      wynik=a+b;

      printf("Wynik dzialania: %f",wynik);

      break;

     }

    case '-':

     {

      wynik=a-b;

      printf("Wynik dzialania: %f",wynik);

      break;

     }

    case '*':

     {

      wynik=a*b;

      printf("Wynik dzialania: %f",wynik);

      break;

     }

    case '/':

    {

      wynik=a/b;

      printf("Wynik dzialania: %f",wynik);   

      break;

     }

    default:     

    {

      printf("Nieznane dzialanie!");

      break;

    }

   }


   return 0;

}

uzikan Tam wyzej jest moj post z dzialajacym programem z minimalnymi zmianami (tzn. poprawione tylko to przez co Ci nie działał), więc może przeanalizuj te zmiany…

ok. To poprawione z else if działa. Ale co jest w takim razie w wersji z wykorzystaniem Switch ??

#include

int main() {


   printf("Prosty kalkulator\n

           -------------------------------------------------------------\n\n

           Wpisz działanie: ");

   float a,b;

   char znak;

   float wynik;

   scanf("%f",&a);

   scanf("%c",&znak);

   scanf("%f",&b);

   switch(znak)

   {

    case '+':

     {

      wynik=a+b;

      printf("Wynik dzialania: %f",wynik);

      break;

     }

    case '-':

     {

      wynik=a-b;

      printf("Wynik dzialania: %f",wynik);

      break;

     }

    case '*':

     {

      wynik=a*b;

      printf("Wynik dzialania: %f",wynik);

      break;

     }

    case '/':

    {

      wynik=a/b;

      printf("Wynik dzialania: %f",wynik);   

      break;

     }

    default:     

    {

      printf("Nieznane dzialanie!");

      break;

    }

   }


   return 0;

}

To jest zle, tak jak i w poprzedniej wersji, przeciez tam ci to poprawilem więc nie wiem czemu dalej robisz ten błąd…

Ok…już wszystko wiem. Po prostu w twojej poprawce nie zauważyłem tego. Nie wiedziałem że to jest źle. Dzieki za wszystko