有没有办法覆盖下面的代码中的变量

问题描述 投票:-5回答:1
#include <stdio.h>
#include <string>

int main(){
    float a,b,z,u,r,k;
    char f,q,m;
    system("color B");
repeat:
    printf("Unesite broj a:  ");
    scanf("%f",&a);
repeatm:
    printf("Unesite broj b:  ");
    scanf("%f",&b);
    printf("Unesite funkciju (+,-,*,/):  ");
finput:
    scanf("%s",&f);
    if(f=='+'){
        goto zbroj;  
       }else{
        if(f=='-'){
            goto razlika;
        }else{
            if(f=='*'){
                goto umnozak;
            }else{
                if(f=='/'){
                    goto kolicnik;
                }else{
                    goto _newf;
                }
            }
        }
    }
//input of numbers and a check if the value of 'f' is one of the characters +,-,* or /
zbroj:
    z=a+b;
    printf("-------------------------------------\n");
    printf("Zbroj ta dva broja je: ");
    printf("%f \n",z);
    goto _new;
razlika:
    r=a-b;
    printf("-------------------------------------\n");
    printf("Razlika ta dva broja je: ");
    printf("%f \n",r);
    goto _new;
umnozak:
    u=a*b;
    printf("-------------------------------------\n");
    printf("Umnozak ta dva broja je: ");
    printf("%f \n",u);
    goto _new;
kolicnik:
   if(b==0){
        system("cls");
        printf("Ne mozete dijeliti s nulom \n");
        goto repeatB;
    }else{
 k=a/b;
    printf("-------------------------------------\n");
    printf("Kolicnik ta dva broja je: ");
    printf("%f \n",k);
    goto _new;
    }
//prints results
_newf:
    printf("Nevazeca funkcija, upisite ponovo:  ");
    goto finput;
//loop if 'f' isnt one of +,-,*,/
_new:
    printf("-------------------------------------\n");
    printf("Novi racun?(y/n)  ");
    scanf("%s",&q);
    system("cls");
    goto repeat1;
//asks if i want to exit or go back to start
repeat1:
    if(q=='y'){
        system("cls");
        goto memory;
    }else{
        if(q=='n'){
            goto exit;
        }else{
            printf("Novi racun? \n");
            printf("Molimo upisite y ili n:  ");
            scanf("%s", &q);
            goto repeat1;
        }
    }
//loops back to start
memory:
    printf("Zelite li iskoristits peredhodni rezultat kao broj a?(y/n):  ");
    scanf("%s", &m);
//asks if i want the previous result as the number 'a'
repeat2:
    if(m=='y'){
        system("cls");
        goto printfa;
    }else{
        if(m=='n'){
            system("cls");
            goto repeat;
        }else{
            printf("Zelite li iskoristits peredhodni rezultat kao broj a? \n");
            printf("Molimo upisite y ili n:  ");
            scanf("%s", &m);
            goto repeat2;
        }
    }
//checks if variable 'm' is either y or n
printfa:
    if(f=='+'){
        a=z;     
    }else{
        if(f=='-'){
            a=r;
        }else{
            if(f=='*'){
                a=u;
            }else{
                if(f=='/'){
                    a=k;       
                }
            }
        }
    }
//this should(?) overwrite the variable 'a'
//why isnt 'a' overwritten with the value of 'z', 'r', 'u' or 'k' here?
    printf("Broj a je:  %f \n", a); 
//here the value of 'a' stays the same as it was before
    goto repeatm;
repeatB:
    printf("Unesite broj b:  ");
    scanf("%f",&b);
    goto kolicnik;
exit:
    system("cls");
    system("pause");
    return(0);
}

有没有办法用'z','r','u'或'k'中的一个值覆盖变量'a'(没有手动输入)。这段代码的结果只是一个+(或 - ,*,/)新b(我再次手动输入,但变量a与第一个输入保持相同)。请求不要介意外语只是说“输入”,“输入b”,“结果是......”,如果代码很乱,也很抱歉..

stdio
1个回答
1
投票

我只能间接回答这个问题,因为直到我把代码清理干净之后才开始研究实际问题 - 但现在我没有得到错误。所以,答案是:清理代码,它可能会按预期工作。

我一直把结果保存在不同的变量中,尽管程序中没有任何东西需要有多个result变量,就像现在一样。该程序的主要流程应该与您的原始流程类似,但现在只是更容易阅读:

#include <iostream>
#include <string>

// helper functions
bool yes_or_no(const std::string& question) {
    char answer;
    do {
        std::cout << question << " (y/n)  ";
        std::cin >> answer;
    } while(answer != 'y' && answer != 'n');
    return answer == 'y';
}

void line() { std::cout << "-------------------------------------\n"; }

void display_result(const std::string& heading, float value) {
    std::cout << heading << " ta dva broja je: " << value << "\n";
}

int main() {
    float op_a, op_b, add_res = 0, mul_res = 0, sub_res = 0, div_res = 0;
    char oper;
    bool save_op_a = false;
    system("color B");

    while(true) {
        system("cls");
        if(save_op_a == false) {
            std::cout << "Unesite broj a:  ";
            std::cin >> op_a;
        } else
            save_op_a = false;

        std::cout << "Unesite broj b:  ";
        std::cin >> op_b;

        while(true) {
            std::cout << "Unesite funkciju (+,-,*,/):  ";
            std::cin >> oper;
            line();
            if(oper == '+') {
                add_res = op_a + op_b;
                display_result("Zbroj", add_res);
                break;
            } else if(oper == '-') {
                sub_res = op_a - op_b;
                display_result("Razlika", sub_res);
                break;
            } else if(oper == '*') {
                mul_res = op_a * op_b;
                display_result("Umnozak", mul_res);
                break;
            } else if(oper == '/') {
                if(op_b == 0.) {
                    std::cout << "Ne mozete dijeliti s nulom\n";
                    continue;
                }
                div_res = op_a / op_b;
                display_result("Kolicnik", div_res);
                break;
            }
        }

        line();

        if(yes_or_no("Novi racun?")) {
            system("cls");
            // asks if i want the previous result as the number 'op_a'
            if(yes_or_no("Zelite li iskoristits peredhodni rezultat kao broj a?")) {
                // this should(?) overwrite the variable 'op_a'
                // why isnt 'op_a' overwritten with the value here?
                system("cls");
                if(oper == '+') {
                    op_a = add_res;
                } else if(oper == '-') {
                    op_a = sub_res;
                } else if(oper == '*') {
                    op_a = mul_res;
                } else if(oper == '/') {
                    op_a = div_res;
                }
                // here the value of 'op_a' stays the same as it was before
                std::cout << "Broj a je:  " << op_a << "\n";
                save_op_a = true;
            }
        } else
            break; // exit
    }

    system("cls");
    system("pause");
    return (0);
}
© www.soinside.com 2019 - 2024. All rights reserved.