stdio - 有没有办法覆盖下面代码中的变量
问题描述
#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”(无需手动输入)。此代码的结果只是 a + (或 -,*,/) new b (我再次手动输入,但变量 a 与第一个输入保持相同)。请不要介意它只是说“输入a”,“输入b”,“结果是..”的外语,如果代码混乱也很抱歉..
解决方案
我只能间接地回答这个问题,因为直到我稍微清理了代码之后我才开始研究实际问题 - 但现在我没有得到错误。所以,答案是:清理代码,它可能会按预期工作。
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);
}
推荐阅读
- java - Arrays.sort 的 lambda 表达式和 Comparator 的匿名实现之间的区别?
- java - 如何绑定到 JavaFX 中的 layoutBounds?
- handlebars.js - 无法弄清楚使用自定义字段的 SendGrid 模板的 if/then 语句的结构
- reactjs - 如何在所有浏览器会话(选项卡)中重置 Redux 状态
- java - TestRestTemplate 正在为 IntelliJ 上的 POST 调用返回 415 Unsupported Media Type
- sql - 如何在下面创建我的 SQL 代码到一个循环,这样我就不需要编写多行代码
- matlab - 未定义的函数或变量“ndwt2”
- php - Date not producing correct result
- angular - 即使绑定的表单无效,如何使 Angular Material Stepper 下一步
- python-3.x - 我想在 python 中使用 while 循环创建简单列表 [0, 0.05, 0.10, 0.15,.....,1.00]