2

I am new in programming so I took a easy problem, to make simple calculator with 5 functions. I made it and code is:

//zadatak je bio da napravim prost kalkulator sa par funkcija (oduzimanje, deljenje...)

//mislim da je problem posto on ne uporedjuje unetu promenjivu kao vrednost u oktalnom brojnom sistemu

#include <stdio.h>
#include <math.h> //moram posto imam koren

float broj1, broj2; //definisanje dve promenjive koje cu koristiti u kodu
char odluka; //definisanje promenjive koja ce mi oznacavati odluku, ne smem da koristim stringove za tekst
int main()
{
        printf("Ako zelite da saberete dva broja unesite 1, da oduzmete unesite 2, da pomnozite unesite 3,da podelite unesite 4 ida izvadite koren unesite 5. Broj ne mora biti ceo!\n");
        scanf("%c",&odluka);
    if(odluka=='1') //pitamo da li je vrednost odluke jednaka jedinici
        { //blok komandi za unos i za ispisivanje zbira ako je odluka jednaka jedinici
        printf("Unesite prvi broj:\n");
        scanf("%f",&broj1);
        printf("Unesite drugi broj:\n");
        scanf("%f",&broj2);
        printf("Zbir Vasa dva broja je: %.2f\n", (float)broj1+broj2);
        }
    else if(odluka=='2') //ako nije onda pitamo da li je jednaka dvojci
        { //blok komandi za unos i za ispisivanje razlike ako je odluka jednaka dvojci
        printf("Unesite prvi broj:\n");
        scanf("%f",&broj1);
        printf("Unesite drugi broj:\n");
        scanf("%f",&broj2);
        printf("Razlika Vasa dva broja je: %.2f\n", (float)broj1-broj2);
        }
    else if(odluka=='3') //ako nije pitamo da li je jednaka trojci
        { //blok komandi za unos i za ispisivanje proizvoda ako je odluka jednaka trojci
        printf("Unesite prvi broj:\n");
        scanf("%f",&broj1);
        printf("Unesite drugi broj:\n");
        scanf("%f",&broj2);
        printf("Proizvod Vasa dva broja je: %.2f\n", (float)broj1*broj2);
        }
    else if(odluka=='4') //ako nije pitamo da li je jednaka cetvorci
        { //blok komandi za unos i za ispisivanje kolicnika ako je odluka jednaka cetvorci
        printf("Unesite prvi broj:\n");
        scanf("%f",&broj1);
        printf("Unesite drugi broj:\n");
        scanf("%f",&broj2);
        printf("Kolicnik Vasa dva broja je: %.2f\n", (float)broj1/broj2);
        }
    else if(odluka=='5') //ako nije pitamo da li je jednaka petici
        { //blok komandi za unos i za ispisivanje korena ako je odluka jednaka petici
            printf("Unesite broj iz koja zelite da izvucete koren:\n");
            scanf("%f",&broj1);
            printf("Koren Vaseg broja je: %.3f\n", (float)sqrt(broj1));
        }
    else //ako nije ni jedan broj od 1 do 5 onda ispisujemo gresku
    printf("Niste uneli ispravnu vrednost odluke!\n");
    return 0;
}

So I wanted to take it to next level and ask question to repeat it after finishing job. I made this code:

//zadatak je bio da napravim prost kalkulator sa par funkcija (oduzimanje, deljenje...)

//mislim da je problem posto on ne uporedjuje unetu promenjivu kao vrednost u oktalnom brojnom sistemu

#include <stdio.h>
#include <math.h> //moram posto imam koren

float broj1, broj2; //definisanje dve promenjive koje cu koristiti u kodu
char odluka, ponovo; //definisanje promenjive koja ce mi oznacavati odluku, ne smem da koristim stringove za tekst
int main()
{
    do
    {
        printf("Ako zelite da saberete dva broja unesite 1, da oduzmete unesite 2, da pomnozite unesite 3,da podelite unesite 4 ida izvadite koren unesite 5. Broj ne mora biti ceo!\n");
        scanf("%c",&odluka);
    if(odluka=='1') //pitamo da li je vrednost odluke jednaka jedinici
        { //blok komandi za unos i za ispisivanje zbira ako je odluka jednaka jedinici
        printf("Unesite prvi broj:\n");
        scanf("%f",&broj1);
        printf("Unesite drugi broj:\n");
        scanf("%f",&broj2);
        printf("Zbir Vasa dva broja je: %.2f\n", (float)broj1+broj2);
        printf("Da li zelite ponoviti program? Za da upisite 1, za ne 0.\n\n");
        getchar();
        scanf("%c", &ponovo);
        }
    else if(odluka=='2') //ako nije onda pitamo da li je jednaka dvojci
        { //blok komandi za unos i za ispisivanje razlike ako je odluka jednaka dvojci
        printf("Unesite prvi broj:\n");
        scanf("%f",&broj1);
        printf("Unesite drugi broj:\n");
        scanf("%f",&broj2);
        printf("Razlika Vasa dva broja je: %.2f\n", (float)broj1-broj2);
        printf("Da li zelite ponoviti program? Za da upisite 1, za ne 0.\n\n");
        getchar();
        scanf("%c", &ponovo);
        }
    else if(odluka=='3') //ako nije pitamo da li je jednaka trojci
        { //blok komandi za unos i za ispisivanje proizvoda ako je odluka jednaka trojci
        printf("Unesite prvi broj:\n");
        scanf("%f",&broj1);
        printf("Unesite drugi broj:\n");
        scanf("%f",&broj2);
        printf("Proizvod Vasa dva broja je: %.2f\n", (float)broj1*broj2);
        printf("Da li zelite ponoviti program? Za da upisite 1, za ne 0.\n\n");
        getchar();
        scanf("%c", &ponovo);
        }
    else if(odluka=='4') //ako nije pitamo da li je jednaka cetvorci
        { //blok komandi za unos i za ispisivanje kolicnika ako je odluka jednaka cetvorci
        printf("Unesite prvi broj:\n");
        scanf("%f",&broj1);
        printf("Unesite drugi broj:\n");
        scanf("%f",&broj2);
        printf("Kolicnik Vasa dva broja je: %.2f\n", (float)broj1/broj2);
        printf("Da li zelite ponoviti program? Za da upisite 1, za ne 0.\n\n");
        getchar();
        scanf("%c", &ponovo);
        }
    else if(odluka=='5') //ako nije pitamo da li je jednaka petici
        { //blok komandi za unos i za ispisivanje korena ako je odluka jednaka petici
            printf("Unesite broj iz koja zelite da izvucete koren:\n");
            scanf("%f",&broj1);
            printf("Koren Vaseg broja je: %.3f\n", (float)sqrt(broj1));
            printf("Da li zelite ponoviti program? Za da upisite 1, za ne 0.\n\n");
            getchar();
            scanf("%c", &ponovo);
        }
    else //ako nije ni jedan broj od 1 do 5 onda ispisujemo gresku
    {
    printf("Niste uneli ispravnu vrednost odluke!\n");
    printf("Da li zelite ponoviti program? Za da upisite 1, za ne 0.\n\n");
    getchar();
    scanf("%c", &ponovo);
            }
    }
    while(ponovo=='1');
    return 0;
}

But problem now is that program is doing great job when you first time use it, when it repeats every input for "odluka" which means decision is false and it goes to last else. I am really, really sorry for code in Serbian but I don't have time to translate it. Can you help me, please?

  • Or use fgets. See this question: http://stackoverflow.com/questions/14565956/how-to-get-newline-character-from-scanf-even-if-its-the-only-input – 1.618 Apr 16 '15 at 23:31

1 Answers1

1

Thank you @user3121023!

try scanf(" %c",&odluka); the space before the % will skip leading newlines left by previous scanf. same for other scanf using %c

Community
  • 1
  • 1