Nie wiem jak ominąć część kodu

0

Mam taki kod:

#include <stdio.h>
#include <stdbool.h>
#define PIERWSZE 0.15 //dla mniejszych badz rownych od 1200
#define KOLEJNE 0.20 // dla wiekszych od 1200 i mniejszych badz rownych 1800
#define RESZTA 0.25 //dla wiekszych od 1800
#define NADGODZINY 1.5

int i_godz, netto, dzialanie, wynagrodzenie;
float podatek, brutto;
bool blad = true;

int main(void)
{
    while (blad)
    {
        printf("*********************************************\n");
        printf("1) 35zl/godz                2) 37zl/godz\n");
        printf("3) 40zl/godz                4) 45zl/godz\n");
        printf("5) wyjscie\n");
        printf("*********************************************\n");

        scanf("%d", &dzialanie);

        switch(dzialanie)
        {
            case 1 :
            wynagrodzenie = 35;
            break;

            case 2 :
            wynagrodzenie = 37;
            break;

            case 3 :
            wynagrodzenie = 40;
            break;

            case 4 :
            wynagrodzenie = 45;
            break;

            case 5 :
            blad = false;
            break;

            default :
            printf("Czytaj dokladnie!");
            break;
        }

        printf("Podaj liczbe przepracowanych godzin\n");
        scanf("%d", &i_godz);

        if(i_godz<=40)
        brutto = (i_godz*wynagrodzenie);

        else
        brutto = (((i_godz-40)*(wynagrodzenie*NADGODZINY))+(40*wynagrodzenie));

            if (brutto <= 1200)
            podatek = brutto * PIERWSZE;

            if (brutto>1200 && brutto <= 1800)
            podatek = (((brutto - 1200) * KOLEJNE) + (1200*PIERWSZE));

            if (brutto > 1800)
            podatek = (((brutto - 1800) * RESZTA)+(600*KOLEJNE)+(1200*PIERWSZE));


        netto = brutto - podatek;

        printf("Brutto = %f\n", brutto);
        printf("Netto = %d\n", netto);
        printf("Podatek = %f\n", podatek);
    }
    getchar();
    return 0;
} 

Ma ktoś pomysł, jak ominąć tą niepotrzebną część kodu przy podaniu 5 (wyjscia) lub innego znaku (innego od 1, 2, 3, 4) w instrukcji switch? Nie mam pomysłu jak to zrobić. ;/

2
int values[] = { 35, 37, 40, 45 }

if (dzialanie >= 1 && dzialanie <=4) wynagrodzenie = values[dzialanie - 1];
else if (dzialanie == 5) blad = false;
else printf("Czytaj dokladnie!");

Choć nie wiem, czy ta część kodu jest aż tak tragiczna. Możesz to zawsze opakować w funkcję która po prostu opakuje tego switcha.

Edit: Btw. IMHO ten kod po switchu wygląda gorzej niż sam switch ;)

0

Chcesz na 5 zakończyć program? Najprościej tak:

case 5:
   return 0;
0

Jeśli musisz wykonać coś poza pętlą to najłatwiej jest postawić etykietę i skoczyć do niej przez goto, ale jeśli masz oddać ten kod wykładowcy to lepiej nie ryzykuj i zrób jak napisał @Ieoia (nie wiadomo na jakiego fanatyka trafisz - albo cie opierniczy, albo zapyta dlaczego tak a nie inaczej), można też zostawić jak jest i po switch'u dodać warunek if (blad == false) break;
Przy okazji czepię się nazewnictwa zmiennej - zamiast ustawiać na początku zmienną blad na true a później false gdy wystąpi przerwanie pętli lepiej jest zrobić odwrotnie.

0
while (blad)
{
    printf("*********************************************\n");
    printf("1) 35zl/godz                2) 37zl/godz\n");
    printf("3) 40zl/godz                4) 45zl/godz\n");
    printf("5) wyjscie\n");
    printf("*********************************************\n");

    scanf("%d", &dzialanie);

    const int wynagrodzenia[] = { 35, 37, 40, 45 };

    switch(dzialanie)
    {
        case 1 :
        case 2 :
        case 3 :
        case 4 :
            wynagrodzenie = wynagrodzenia[dzialanie - 1];
            break;

        case 5 :
            blad = false;
            continue; // <------------------

        default :
            printf("Czytaj dokladnie!");
            continue; // <------------------
    }

    /* ... */

A najlepiej wydziel to do osobnej funkcji żeby było bardziej czytelne.

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