2009-10-23 6 views
6

올바른 나누기 기능이있는 프로그램을 만들려고했습니다.왜 내 C++ 나누기 프로그램이 컴파일되지 않습니다

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

그리고 나는이 오류가 : 내 코드이었다 { 라인

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

합니다. 오른쪽 이중 분할 (x, y) 라인

그리고 또 다른 오류 발생 a = divide (x, y); 라인

divide cannot be used as a function 

에서. 코드 : 블록 사용 중

답변

13

divide 함수에 적절한 함수 서명을 지정해야합니다. 특히, 함수의 인수는 유형 누락 :

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

또한 if 문에 각 블록의 범위를 만들어야합니다

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

기술적으로,'if' /'else' /'다른 if' 블록의 중괄호는 필요하지 않습니다. –

+6

그러나 많은 시간 동안 당신은 아마도 거기에 괄호가 있다고 생각하는 실수를하면 나중에 몇 시간 동안 문제를 해결할 수 있기 때문에 아마도 그것들을 넣어야합니다. :) –

3

중괄호를에 문이하지 않으면 else 블록을 둘러보십시오. 별도의 괄호 쌍이 필요합니다. 시도 :

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

'다른'후 코드의 한 라인 주위에 중괄호 (의 두 번째 세트는 엄격하게 필요하지 않습니다, 당신은 만약 그렇지 한는 떨어져 괄호를 남길 수 있습니다 블록이 하나 인 경우 그러나 실수로 쉽게 실수를해서는 안되며, 실수로 쉽게 실수를해서는 안됩니다.

또한 divide 함수에서 xy 변수의 유형을 제공하지 않았습니다. 유형을 지정해야합니다 이 변수는 다른 변수와 마찬가지로 쓸 수 있습니다.

double x,y,z,a ; 

... 함수 밖에 있지만 도움이되지 않습니다. 그것은 , y, za이라는 두 개의 변수를 사용자의 기능과 완전히 독립적으로 으로 정의합니다.

+0

+1 '선택적'괄호를 언급합니다. 사람들이 두 번째 코드 줄을 추가 할 때 중괄호를 추가하는 것을 잊어 버렸기 때문에 나는 많은 버그를 목격했습니다. 예를 들어 - 어떤 종류의 디버그 std :: cout을 'return y/x'줄 앞에 넣는 것을 고려하십시오. 천천히 유지 보수를 위해 6 개월 동안 줄을 서서 내 팀에 천천히 설득 중입니다! –

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

매개 변수 유형이 누락되었습니다. – dirkgently

관련 문제