Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';这个C++;密码?(控制台) 对我来说,这个代码似乎没有错误,而且在我学习C++的方式上是正确的。可能出了什么问题_C++_Visual Studio 2013 - Fatal编程技术网

什么';这个C++;密码?(控制台) 对我来说,这个代码似乎没有错误,而且在我学习C++的方式上是正确的。可能出了什么问题

什么';这个C++;密码?(控制台) 对我来说,这个代码似乎没有错误,而且在我学习C++的方式上是正确的。可能出了什么问题,c++,visual-studio-2013,C++,Visual Studio 2013,这是我的代码: #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); vo

这是我的代码:

#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;



}

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


在这种情况下,您可能希望将变量声明为全局变量。这是通过将定义移到任何函数之外而不是函数中来实现的。

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

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

2) 您没有收集
Calculation()
返回值


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

您的代码有很多地方出错,但有一个根本原因——对
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;
}
void Calculation(long double x, long double y, long double &sum,
    long double &difference, long double &product, long double &quotient);
Calculation(a, b, sum, difference, product, quotient);
您还需要更改
计算
的原型声明,如下所示:

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;
}
void Calculation(long double x, long double y, long double &sum,
    long double &difference, long double &product, long double &quotient);
Calculation(a, b, sum, difference, product, quotient);
调用
Calculation
如下:

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;
}
void Calculation(long double x, long double y, long double &sum,
    long double &difference, long double &product, long double &quotient);
Calculation(a, b, sum, difference, product, quotient);

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

正如其他人所说,问题的直接原因是对
返回和作用域如何工作的误解

处理C++时,编译器/链接器警告可能是神秘的和/或混淆的。在您的示例中,编译器应该在第一次

返回后警告您无法访问的代码,但是默认情况下Visual Studio 2013不会这样做

您可以通过启用所有警告来做到这一点,这是一种很好的做法。在项目属性中,转到配置属性->C/C++->常规->警告级别,然后选择启用所有警告


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

类似于“一切”。通过添加更多的<代码>返回< /COD>语句,你不能返回多个事物。很显然,第一个错误是你学习C++的方式…跳过类是我猜测的第一个错误。你可能想读。而且,1)我很惊讶编译器不会发出关于多个返回语句的警告。2)这不是代码审查网站。嗯,请定义“定义”好吗?对不起,我只是个初学者。嗯,java有多容易。。。每个人都告诉我这非常困难,比C++更容易,尤其是在基础层面上。首先,我绝对推荐C。VisualStudio+Resharper+good book+StackOverflow的组合使学习其他语言变得非常容易。嗯,我在YouTube上学了一点C。我注意到它有点类似于VisualBasic。我已经知道了VisualBasic的基础知识。我应该继续提高我的VB技能,还是应该坚持学习C#?我自己也不了解VB,但它有一个相当糟糕的观点。(例如,请参见)。