这个C ++代码有什么问题? (安慰)

时间:2013-11-26 10:37:49

标签: c++ visual-studio-2013

对我来说,这段代码似乎没有错误,而且我学习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'和'b'工作的计算器。它通过函数Calculate计算'a'和'b'的和,差,乘积和商,并用函数Output输出答案。

Error: uninitialized local variable 'quotient' used.
uninitialized local variable 'product' used.
uninitialized local variable 'difference' used.
uninitialized local variable 'sum' used.

4 个答案:

答案 0 :(得分:5)

你的代码有很多问题,但是有一个根本原因 - 对return语句如何工作的误解。

您有一个包含多个return语句的函数。您似乎认为所有这些陈述都会执行;那个假设是不正确的。只执行函数中到达的第一个return语句;其余的被忽略了。

此外,您似乎暗示return语句会自动影响调用者中的变量;它不会。为了修改调用者中的变量,调用者本身需要分配返回的值。

如果您需要函数返回多个值,则需要更改方法:它应该通过引用获取多个参数,并修改它们,如下所示:

void 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;
}

您还需要更改Calculation的原型声明,如下所示:

void Calculation(long double x, long double y, long double &sum,
    long double &difference, long double &product, long double &quotient);

像这样呼叫Calculation

Calculation(a, b, sum, difference, product, quotient);

这将解决您的编译问题,代码将正确运行。

答案 1 :(得分:1)

问题是您将错误消息中列出的变量声明为 local 变量。这意味着没有其他功能可以使用它们。在另一个函数中再次声明它们会声明 new 局部变量。

在这种情况下,您可能希望将变量声明为全局变量。这是通过将定义移到任何函数之外来完成的,并且只有该定义而不是函数。

答案 2 :(得分:1)

main函数中,在将这些变量传递给Output()函数之前,您没有为这些变量设置任何值 - 因此它们是“未初始化的”。另外,正如一些评论中所提到的那样,还有其他一些问题,这里有几个:

1)您不能在同一逻辑路径上的函数中进行多次返回

2)您无论如何都没有收集return Calculation()

我希望您可以通过引用传递其中的一些变量来解决您的问题。

答案 3 :(得分:1)

正如其他人所说,问题的直接原因是对return和范围界定的工作方式存在误解。

在处理C ++时,编译器/链接器警告可能会含糊不清和/或令人困惑。在您的示例中,编译器应在第一个return之后警告您无法访问的代码,但默认情况下默认情况下的Visual Studio 2013不会这样做。

你可以通过启用所有警告来实现这一点,这无论如何都是一种很好的做法。在项目属性中,转到配置属性 - &gt; C / C ++ - &gt; 一般 - &gt; 警告级别,然后选择 EnableAllWarnings

最后的建议:如果你是为了好玩而编程或者学习如何编程,我建议你从C#或Java开始,它们更容易并且有更好的工具支持。