【问题标题】:When I repeat program, it doesn't do same as first time当我重复程序时,它与第一次不同
【发布时间】:2015-04-16 23:25:23
【问题描述】:

我是编程新手,所以我做了一个简单的问题,制作具有 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;
}

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

【问题讨论】:

标签: c


【解决方案1】:

谢谢@user3121023!

试试scanf("%c",&odluka); % 之前的空格将跳过前导 前一个 scanf 留下的换行符。使用 %c 的其他 scanf 也一样

【讨论】:

    猜你喜欢
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    相关资源
    最近更新 更多