为什么我的C ++除了程序不能编译

时间:2009-10-23 19:52:37

标签: c++

我尝试制作一个具有正确Divide功能的程序。 我的代码是:

#include <iostream>

using namespace std;

double x,y,z,a;

double divide(x,y) {
    if (x >= y) {
        x=z;
        z=y;
        y=x;
        return(x/y);
    }
    else
        return(y/x);
}

int main()
{
    double x,y,z ;
    cout << "Enter x " <<endl;
    cin >> x;
    cout << "Enter y " <<endl;
    cin >> y;
    a = divide (x,y);
    cout << a <<endl;

    system("pause");
    return 0;
}

我有2个错误:

 expected `,' or `;' before '{' token
{行上

。正好位于双重划分(x, y)

之下

另一个错误

divide cannot be used as a function
a = divide (x, y);行上

。 我正在使用Code:Blocks

4 个答案:

答案 0 :(得分:13)

您需要为函数divide指定正确的函数签名。具体来说,该函数的参数缺少其类型:

double divide(double x, double y)
{
    ...
}

您还需要在if语句中为每个块创建一个范围:

if (x > y)
{
    ...
}
else
{
    ...
}

答案 1 :(得分:3)

if语句中的大括号不会绕过else块。你需要一对单独的支架。尝试:

    if (x >= y){
        x=z ;
        z=y ;
        y=x ;
        return(x/y);
    }
    else {
        return(y/x);
    }

第二组大括号(在'else'之后的代码的一行周围不是绝对必要的;如果块只有一行,你可以将大括号从if或else中删除。但是当你“你可能不应该这么做,因为这样很容易犯错误。”

此外,您还没有为除法函数中的xy变量提供类型。您必须为它们指定类型,就像对任何其他变量一样。你写过了

    double x,y,z,a ;

......在功能之外,但这没有帮助;它定义了名为xyza new 双变量,完全独立于函数中的变量。

答案 2 :(得分:0)

更正了if ... else中的大括号。还需要在函数的参数中定义一个类型。

using namespace std;

        double x,y,z,a ;

double divide (double x, double y)
    {
        if (x >= y){
            x=z ;
            z=y ;
            y=x ;
            return(x/y);
        }  
        else
        {
            return(y/x);
        }
    }

    int main()
{
    double x,y,z ;
   cout << "Enter x " <<endl;
   cin >> x ;
   cout << "Enter y " <<endl;
   cin >> y ;
   a = divide (x,y);
   cout << a <<endl;

        system("pause");
    return 0;
}

答案 3 :(得分:0)

#include <iostream>

using namespace std;

// divides x/y
double divide (x,y)
{
    if(y != 0)
    { 
        /*{}  <- this is called a scope.
        it is important to keep track of scopes.
        each function has it's own scope
        each loop or an if instruction can have it's own scope
        in case it does - all the instructions from the scope will be executed
        in case it doesn't - only the 1st instruction after the if/else/for/while etc. will be executed

        Here's another funny thing about scopes :
        {
            double x; // this variable exists ONLY within this scope
        }
        {
            // y doesn't exist here
            { 
                double y; // y exists here. it's local
            }
            // y doesn't exist here
        }
        */
        return x / y; 
    }
    else
        return 0;
}

int main()
{
    double x,y;
    cout << "Enter x " <<endl;
    cin >> x ;
    cout << "Enter y " <<endl;
    cin >> y ;
    double a = divide (x,y);
    cout << a <<endl;
    cin;
    return 0;
}