这个C++代码有什么问题?(控制台)
What's wrong in this C++ code? (Console)
对我来说,这段代码似乎没有错误,而且我学习C++的方式是正确的。可能出了什么问题?
这是我的代码:
#include<iostream>
#include<cstdlib>
#include<string>
#include<cmath>
using namespace std;
double Calculation(long double x, long double y);
void Output(long double s, long double d, long double p, long double q);
void main(){
long double a;
long double b;
long double sum;
long double difference;
long double product;
long double quotient;
cout << "Enter your first number." << endl;
cin >> a;
cout << "Enter your second number." << endl;
cin >> b;
Calculation(a, b);
Output(sum, difference, product, quotient);
system("pause");
}
double Calculation(long double x, long double y){
long double sum;
long double difference;
long double product;
long double quotient;
sum = x + y;
difference = x - y;
product = x * y;
quotient = x / y;
return sum;
return difference;
return product;
return quotient;
}
void Output(long double s, long double d, long double p, long double q){
cout << "The sum of your numbers is " << s << "." << endl;
cout << "The difference between your numbers is " << d << "." << endl;
cout << "The product of your numbers is " << p << "." << endl;
cout << "The quotient of your numbers is " << q << "." << endl;
}
说明:这是一个由变量"a"answers"b"组成的计算器。它通过Calculate函数计算"a"answers"b"的和、差、积和商,并通过Output函数输出答案。
Error: uninitialized local variable 'quotient' used.
uninitialized local variable 'product' used.
uninitialized local variable 'difference' used.
uninitialized local variable 'sum' used.
您的代码有很多错误,但有一个根本原因——对return
语句工作方式的误解。
您有一个包含多个return
语句的函数。你似乎认为所有这些陈述都会得到执行;这种假设是不正确的。只执行函数中到达的第一个return
语句;其余的被忽略。
此外,您似乎暗示return
语句会自动影响调用者中的变量;不会的。为了修改调用程序中的变量,调用程序本身需要分配返回值。
如果你需要你的函数返回多个值,你需要改变方法:它应该引用多个参数,并修改它们,比如:
void Calculation(long double x, long double y, long double &sum,
long double &difference, long double &product, long double "ient) {
sum = x + y;
difference = x - y;
product = x * y;
quotient = x / y;
}
您还需要更改Calculation
的原型声明,如下所示:
void Calculation(long double x, long double y, long double &sum,
long double &difference, long double &product, long double "ient);
这样调用Calculation
:
Calculation(a, b, sum, difference, product, quotient);
这将解决您的编译问题,并且代码将正确运行。
问题是您将错误消息中列出的变量声明为本地变量。这意味着没有其他功能能够使用它们。在另一个函数中再次声明它们将声明新的局部变量。
在这种情况下,您可能希望将变量声明为全局变量。这是通过将定义移动到任何函数之外来完成的,并且只具有该定义,而不在函数中。
在main
函数中,在将这些变量传递给Output()
函数之前,您不会为这些变量设置任何值,因此它们是"未初始化的"。此外,正如一些评论中提到的,还有许多其他问题,这里有几个:
1) 您不能在同一逻辑路径上的函数中进行多次返回
2) 您无论如何都没有收集Calculation()
的return
我希望您可以通过引用传递其中一些变量来解决问题。
正如其他人所说,问题的直接原因是对return
和范围界定工作方式的误解。
在处理C++时,编译器/链接器警告可能是神秘的和/或令人困惑的。在您的示例中,编译器应该在第一个return
之后警告您无法访问的代码,但默认情况下的Visual Studio 2013不会这样做。
您可以通过启用所有警告来做到这一点,这无论如何都是一个很好的做法。在项目属性中,转到配置属性->C/C++->常规>警告级别,然后选择启用所有警告。
最后一条建议:如果你是为了好玩或学习编程,我建议你从C#或Java开始,它们更容易,并且有更好的工具支持。
- C++出现控制台错误.我无法识别源代码的问题
- C++无法解决我的问题。我有控制台错误
- 在 win32 控制台项目 VS2015 中静态链接 libcurl 的问题
- 分配控制台问题
- C++控制台问题
- C 浮点控制台输出问题
- 在微控制器上编写 UART 控制台时出现 UTF-8 问题
- C++(DLL)与C#控制台应用程序的交互问题
- 这个C++代码有什么问题?(控制台)
- C++控制台"屏幕捕获"问题
- 控制台输出C++问题
- 使用控制台的可视C++:while 循环的字符/字符串兼容性问题
- 简单的C++控制台 I/O 问题
- 将wchar_t打印到控制台时存在内存泄漏问题
- fopen和windows控制台的问题
- 我在编写控制台应用程序以创建一个简单的程序来解决养老金的数学方程时遇到问题
- Eclipse CDT 无法构建 - 不确定出了什么问题(包括控制台)
- 附件控制台的问题
- 简单的输入/输出控制台应用程序,不按给定的顺序(结构)打印问题
- 错误LNK2019:函数___tmainCRTStartup中引用了未解析的外部符号_main,但这次不是 Windows/控制台问题!