当我重复编程时,它不会像第一次那样做

时间:2015-04-16 23:25:23

标签: c

我是编程新手,所以我提出了一个简单的问题,用5个函数制作简单的计算器。我做了它,代码是:

//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;
}

所以我想把它提升到新的水平,并在完成工作后提出问题重复。我做了这个代码:

//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;
}

但现在的问题是,当你第一次使用它时,程序做得很好,当它重复每次输入时,#od; odluka&#34;这意味着决定是错误的,它会持续到最后。对于塞尔维亚语的代码,我真的非常抱歉,但我没有时间翻译它。你能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

谢谢@user3121023

  

尝试scanf(“%c”,&amp; odluka); %之前的空格将跳过领先   上一个scanf留下的换行符。与使用%c

的其他scanf相同