amatorski blad w prostym kalulatorze

Odpowiedz Nowy wątek
2014-12-29 12:04
0

Witam! bawię się w programowanie od może miesiąca i dostałem zadanie utworzenia kalkulatora, opartego na instrukcji switch który miał wyglądać tak

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main()
{
    float liczba, akumulator;
    char znak;
    do
    {
    scanf ("%f %c",&liczba ,&znak);
    switch (znak)
    {
    case 'S':
        akumulator=liczba;
        printf ("ustawiono akumulator na %f\n", akumulator);
        break;
    case '+':
        akumulator=akumulator + liczba;
        printf ("=%f\n", akumulator);
        break;
    case '-':
        akumulator=akumulator -liczba;
        printf ("=%f\n", akumulator);
        break;
    case 'E':
        printf ("wyjscie z programu\n");
        break;
    case '*':
        akumulator=akumulator*liczba;
        printf ("=%f\n", akumulator);
        break;
    case '/':
        akumulator=akumulator/liczba;
        printf ("=%f\n", akumulator);
        break;
    }
    }
    while (znak!='E');
 
    return 0;
 
}

wszystko działa pięknie tak jak chciałem, ale chcę dodać również sprawdzenie czy uzytkownik nie wpisał dzielenia przez 0 więc dodaje coś takiego

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main()
{
    float liczba, akumulator;
    char znak;
    do
    {
    scanf ("%f %c",&liczba ,&znak);
    if ( (znak = '/') && (liczba = 0) )
    {
        printf ("nie dziel przez 0");
    }
    else
    switch (znak)
    {
    case 'S':
        akumulator=liczba;
        printf ("ustawiono akumulator na %f\n", akumulator);
        break;
    case '+':
        akumulator=akumulator + liczba;
        printf ("=%f\n", akumulator);
        break;
    case '-':
        akumulator=akumulator -liczba;
        printf ("=%f\n", akumulator);
        break;
    case 'E':
        printf ("wyjscie z programu\n");
        break;
    case '*':
        akumulator=akumulator*liczba;
        printf ("=%f\n", akumulator);
        break;
    case '/':
        akumulator=akumulator/liczba;
        printf ("=%f\n", akumulator);
        break;
    }
    }
    while (znak!='E');
 
    return 0;
 
}

i teraz za każdym działaniem pokazuje mi "=inf", czyli wszystko szlag trafił! :D
może mi ktoś powiedzieć, gdzie popełniam błąd?

edytowany 2x, ostatnio: eroloo, 2014-12-29 12:07

Pozostało 580 znaków

2014-12-29 12:12
0

zamiast

 liczba = 0 

powinno byc

liczba == 0 

formatowanie kodu masz zle. Nie tragiczne, ale zle.

edytowany 1x, ostatnio: fasadin, 2014-12-29 12:12

Pozostało 580 znaków

2014-12-29 12:12
0

Do porównywania używamy operatora ==.

Pozostało 580 znaków

2014-12-29 12:16
0

dziękuje, formatowanie czyli masz na myśli wcięcia tak?

Pozostało 580 znaków

2014-12-29 12:21
0

tak

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main()
{
    float liczba, akumulator;
    char znak;
    do
    {
        scanf("%f %c",&liczba ,&znak);
        if (znak = '/' && liczba = 0)
        {
            printf("nie dziel przez 0");
        }
        else
            switch(znak)
            {
            case 'S':
                akumulator=liczba;
                printf("ustawiono akumulator na %f\n", akumulator);
                break;
            case '+':
                akumulator=akumulator + liczba;
                printf("=%f\n", akumulator);
                break;
            case '-':
                akumulator=akumulator -liczba;
                printf("=%f\n", akumulator);
                break;
            case 'E':
                printf("wyjscie z programu\n");
                break;
            case '*':
                akumulator=akumulator*liczba;
                printf("=%f\n", akumulator);
                break;
            case '/':
                akumulator=akumulator/liczba;
                printf ("=%f\n", akumulator);
                break;
            }
    }
    while(znak!='E');
    return 0;
} 

i widac co jest do czego. Poczytaj sobie jak sie powinno formatowac w jezyku C. Dodatkowo te spacje przy wywolaniu funkcji...

edytowany 2x, ostatnio: fasadin, 2014-12-29 12:22

Pozostało 580 znaków

2014-12-29 13:26
0

To nie jest dobry pomysł na rozrzucanie obsługi tak jak dla '/' oraz dla 'E', zastanów się nad:

#include <stdio.h>
 
int main()
  {
   float liczba, akumulator=0;
   char znak;
   while(scanf("%f %c",&liczba,&znak)==2)
     {
      switch(znak)
        {
         case 'E':
            printf("wyjscie z programu\n");
         return 0;
         case 'S':
            printf("ustawiono akumulator na %f\n",akumulator=liczba);
         break;
         case '+':
            printf("=%f\n",akumulator+=liczba);
         break;
         case '-':
            printf("=%f\n",akumulator-=liczba);
         break;
         case '*':
            printf("=%f\n",akumulator*=liczba);
         break;
         case '/':
            if(liczba) printf ("=%f\n",akumulator/=liczba);
            else printf("nie dziel przez 0\n");
         break;
        }
     }
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0