2009-10-23 11 views
6

He intentado hacer un programa que tiene una función de división correcta. Mi código fue:¿Por qué mi programa de división de C++ no compila

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

y tengo 2 errores:

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

en la línea {. Justo debajo de la línea de doble división (x, y)

Y otro error

divide cannot be used as a function 

en la línea a = divide (x, y);. Estoy usando Código: Bloques

Respuesta

13

Debe especificar una firma de función adecuada para la función divide. En concreto, los argumentos de la función están perdiendo sus tipos:

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

También es necesario crear un ámbito para cada bloque en una sentencia if:

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

Técnicamente, no son necesarios los corchetes de un bloque 'if' /' else'/'demás if' si el bloque contiene una sola línea de código. –

+6

Pero muchas veces probablemente debas ponerlas ya que te ahorrará horas de problemas más adelante si cometes el error de pensar que * había llaves * allí. :) –

3

Las llaves en una sentencia if no lo hacen da la vuelta al bloque de más. Necesitas un par de llaves separadas allí. Proveedores:

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

El segundo juego de llaves (alrededor de la línea del código después de la 'cosa' no son estrictamente necesarios, se puede dejar las llaves de un caso o un otro sitio si el bloque es único línea larga. Pero mientras eres nuevo, probablemente no deberías, ya que es fácil cometer errores de esa manera.

Además, no has proporcionado tipos para las variables x y y en tu función de división. Debes especificar los tipos para ellos, tal como lo haría con cualquier otra variable. Usted ha escrito

double x,y,z,a ; 

... fuera de la función, pero eso no ayuda; Define new variables dobles llamadas x, y, z y a, completamente independientes de las de su función.

+0

+1 por mencionar las llaves 'opcionales'. He sido testigo de muchos errores en el código fuente porque las personas olvidan agregar llaves cuando agregan la segunda línea de código. Por ejemplo, considere colocar algún tipo de debug std :: cout antes de la línea 'return y/x'. Poco a poco estoy convenciendo a mi equipo de que siempre se ponen llaves para facilitar el mantenimiento 6 meses después. –

0

Corregido sus llaves en su if ... else. también necesita definir un tipo en los parámetros de su función.

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; 
} 
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; 
} 
+2

Faltan tipos de parámetros. – dirkgently

Cuestiones relacionadas