有没有办法覆盖下面代码中的变量
is there a way to overwrite the variable in the code below
#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'或[=20的值之一覆盖变量'a'(无需手动输入) =].这段代码的结果只是 a + (or -,*,/) new b(我再次手动输入,但变量 a 与第一个输入保持相同)。请不要介意它只是说 "input a"、"input b"、"the result is.." 的外语,如果代码混乱也很抱歉..
我只能间接回答这个问题,因为直到我稍微清理了代码之后我才开始调查实际问题 - 但现在我没有得到错误。所以,答案是:清理代码,它可能会按预期工作。
我一直将结果保存在不同的变量中,尽管程序中的任何内容都不需要像现在这样具有多个 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);
}
#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'或[=20的值之一覆盖变量'a'(无需手动输入) =].这段代码的结果只是 a + (or -,*,/) new b(我再次手动输入,但变量 a 与第一个输入保持相同)。请不要介意它只是说 "input a"、"input b"、"the result is.." 的外语,如果代码混乱也很抱歉..
我只能间接回答这个问题,因为直到我稍微清理了代码之后我才开始调查实际问题 - 但现在我没有得到错误。所以,答案是:清理代码,它可能会按预期工作。
我一直将结果保存在不同的变量中,尽管程序中的任何内容都不需要像现在这样具有多个 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);
}