2009-10-23 10 views
6

ho cercato di fare un programma che ha una funzione Divide corretta. Il mio codice era:Perché il mio programma divide C++ non 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; 
} 

E ho 2 errori:

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

sulla linea {. Proprio sotto la doppia frattura (x, y) linea

E un altro errore

divide cannot be used as a function 

sulla linea a = divide (x, y);. Sto usando Codice: Blocchi

risposta

13

È necessario specificare una firma corretto funzionamento per la funzione divide. In particolare, gli argomenti della funzione mancano i loro tipi:

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

È necessario anche creare un ambito per ogni blocco in un'istruzione if:

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

Tecnicamente, le coppie di un if'/'else' /' 'blocco altro if' non sono necessari se il blocco contiene una sola riga di codice. –

+6

Ma molte volte dovresti probabilmente metterli ancora perché in seguito ti risparmierà ore di guai se commetti l'errore di pensare che ci fossero delle parentesi. :) –

3

Le parentesi in un'istruzione if non lo fanno aggirare il blocco else. Hai bisogno di un paio di bretelle separate lì. Prova:

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

La seconda serie di parentesi graffe (circa l'una riga di codice dopo il 'resto' non sono strettamente necessari, è possibile lasciare le parentesi graffe fuori un caso o un altro, se il blocco è solo una linea, ma se sei nuovo probabilmente non dovresti, perché è facile commettere errori in questo modo.

Inoltre, non hai fornito i tipi per le variabili x e nella funzione di divisione. Devi specificare i tipi per loro, proprio come faresti per qualsiasi altra variabile Hai scritto

double x,y,z,a ; 

... al di fuori della funzione, ma ciò non aiuta; definisce nuove variabili doppie denominate x, , z e a, completamente indipendenti da quelle della propria funzione.

+0

+1 per aver menzionato le parentesi graffe "opzionali". Ho visto molti bug nel codice sorgente perché le persone dimenticano di aggiungere delle parentesi quando aggiungono la seconda riga di codice. Ad esempio, considera la possibilità di inserire una sorta di debug std :: cout prima della riga 'return y/x'. Sto lentamente convincendo la mia squadra che mette sempre le protezioni per una facile manutenzione per 6 mesi! –

0

Corretto tua parentesi nella vostra if ... else. anche bisogno di definire un tipo nei parametri della tua funzione.

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

Mancano i tipi di parametri. – dirkgently

Problemi correlati