C++:我的简单计算器程序无法打印出来。我也认为我的变量命名不正确
C++: My simple calculator program won't print out. I also think my variable naming is incorrect
计算器程序将接受第一个数字、运算和第二个数字的输入。
我已经设置了程序来选择带有条件语句的操作。但是,程序不输出。
我还尝试使用异或逻辑打印出不正确的操作选择的错误消息。
我认为问题在于我如何使用我的变量。任何批评或建议都值得赞赏。
我是学习C++的新手,所以我正在尝试制作一个简单的双输入计算器。我试图挑战我对变量和条件语句的理解。
void add_func();
void sub_func();
void mult_func();
void divi_func();
int main()
{
double a;
double b;
char op;
cout << "Input 1st Number:" << endl;
cin >> a;
cout << "Select Operation: (1 = +) (2 = -) (3 = *) (4 = /)" << endl;
cin >> op;
cout << "Input 2nd Number:" << endl;
cin >> b;
if(op == 1)
cout << add_func();
if(op == 2)
sub_func();
if(op == 3)
mult_func();
if(op == 4)
divi_func();
if(op != (1 ^ 2 ^ 3 ^ 4))
cout << "Invalid Operation Selected" << endl;
return 0;
}
void add_func()
{
double a;
double b;
double c;
c = a + b;
cout << a << " + " << b << " = " << c << endl;
}
我截断了代码以仅包含 add 函数。它应该添加数字并打印出结果。
确定这一点:if(op != (1 ^ 2 ^ 3 ^ 4))
没有做你认为的那样。
^
运算符是按位排除 OR,如果两个输入均为 0,或者两个输入均为 1,则结果中给出 0 位。如果一个输入是 1,另一个是 0,则结果为 1。
这些操作是从左到右评估的,因此让我们一次完成一个操作。为了清楚地说明结果是如何产生的,我们将包括数字的二进制等价物:
-
1 ^ 2
->0001 ^ 0010
->0011
,这是3
-
3 ^ 3
->0011 ^ 0011
->0000
,这是0
-
0 ^ 4
->0000 ^ 0100
->0100
,这是4
所以你的代码等效于:if (op != 4)
.
您需要使用函数参数在函数之间传递值。不同函数中的两个变量永远不会是同一个变量,即使它们具有相同的名称。
你必须选择是要在主函数中还是在添加函数中执行cout <<
。你似乎在尝试两者兼而有之。
这是操作方法(我选择在添加功能而不是主函数中执行cout <<
(。
void add_func(double x, double y);
...
if(op == 1)
add_func(a, b);
...
void add_func(double x, double y)
{
double sum = x + y;
cout << x << " + " << y << " = " << sum << endl;
}
查看 add 函数中的参数(我称之为 x
和 y
,您可以随心所欲地称呼它们(。并查看调用 add 函数时a
和b
变量作为参数传递。
你的C++书必须讨论函数参数和传递参数,这绝对是C++编程的基础。我认为是时候修改那一章了。
请考虑使用简单的在线教程来学习基础知识。例如:https://www.tutorialspoint.com/cplusplus/index.htm或:https://www.w3schools.com/cpp/default.asp此外,在编写代码时,请尝试选择最简单的解决方案。无论如何,以后会变得复杂:)对于简单的计算器,一个简单的开关就足够了。请考虑以下 C 代码:
#include <iostream>
int main()
{
double a;
double b;
char op;
while(true)
{
std::cout << "Input 1st Number: " << std::endl;
std::cin >> a;
std::cout << "Select Operation: (+) (-) (*) (/) or (x) to exit: " << std::endl;
std::cin >> op;
std::cout << "Input 2nd Number: " << std::endl;
std::cin >> b;
switch (op)
{
case '+':
std::cout << std::to_string(a+b) << std::endl;
break;
case '-':
std::cout << std::to_string(a-b) << std::endl;
break;
case '*':
std::cout << std::to_string(a*b) << std::endl;
break;
case '/':
std::cout << std::to_string(a/b) << std::endl;
break;
case 'x':
return 0;
break;
default:
std::cout << "Invalid Operation Selected" << std::endl;
break;
}
}
}
它很丑陋,它有丑陋的输出,但它可以完成这项工作:)尝试尝试,例如实现更好的输出。将其从 switch 语句更改回 if 语句,并根据需要添加函数调用。在在线提供的教程中了解上述概念,如果您遇到困难,请不要羞于提问。失败和再次失败是可以的,这就是你学习的方式——通过努力变得更好:)
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么我的for循环不能正确获取argv
- 我是否不正确地集中了这些字符数组?
- 如果我的类正确地管理了一个资源,那么拥有智能的poointer有什么意义
- 我只是想让我的代码正确编译
- 我删除不正确
- 无法让我的代码正确排序用户输入的数字数组(使用递归)
- 我如何才能根据我的代码正确设置这个贷款等式
- 如何避免int(xxx)_t之间的重叠,并使我的代码正确
- 循环QT C 的不正确总和
- 在这种情况下,为什么Sfinae对我来说不正确以及如何修复它
- Slicing vs Upcasting:我的理解正确吗
- 我无法让我的程序正确读取输入文件中的值(二维数组)
- 我的逻辑正确吗?它给出了分段错误
- Java最终字符串,C++等效.我的理解正确吗
- 我应该为我的不透明对象使用整数ID还是指针?
- 浮点数和由于舍入行为导致的不正确结果
- 如何为队列释放内存?我的不免费
- 为什么在这种情况下没有调用复制构造函数-我的推理正确吗?
- 是否有可能valgrind报告我的程序正确运行的致命错误?