2013-04-21 2 views
0

사용자 입력보다 완전한 숫자를 찾는 코드를 작성하려고합니다. 올바른 출력의 샘플 :"부동 소수점 예외"오류가 발생하는 이유는 무엇입니까?

은 양의 정수 입력 : 100
6은 100

이하 더 이상 완벽한 숫자가 있습니다 완벽한 수
완벽한 수
(28)입니다

하지만 코드를 실행하면 오류가 발생합니다. Floating point exception

이유를 알 수 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 인수는 단지 교환하는

#include <iostream> 

using namespace std; 

bool isAFactor(int, int); 

int main(){ 
    int x, y; 
    int countOut, countIn; 
    int userIn; 
    int perfect = 0; 

    cout << "Enter a positive integer: "; 
    cin >> userIn; 

    for(countOut = 0; countOut < userIn; countOut++){ 
     for(countIn = 1; countIn <= countOut; countIn++){ 
      if(isAFactor(countOut, countIn) == true){ 
       countOut = countOut + perfect; 
      } 
     } 

     if(perfect == countOut){ 
      cout << perfect << " is a perfect number" << endl; 
     } 

     perfect++; 
    } 

    cout << "There are no more perfect numbers less than or equal to " << userIn << endl; 

    return 0; 
} 


bool isAFactor(int inner, int outer){ 
    if(outer % inner == 0){ 
     return true; 
    } 

    else{ 
     return false; 
    } 
} 
+7

x % 0을 계산 중입니다. –

+3

실제 오류 메시지를 게시하면 도움이됩니다. 나는 어떤 컴파일러도 "acception"을 언급하지 않는다고 확신한다. 또한 정수만있는 코드에서 부동 소수점 오류가 발생하는 것은 다소 이상합니다. –

+0

"부동 소수점 예외" 계산이 x % 1로 진행됩니다. int 및 bool 값만 사용하여 오류 메시지가 표시되는 것은 이상한 일입니다. 그것이 내가 질문을하는 이유입니다. P – user2304913

답변

0

으로 호출해야 할 때 isAFactor(countOut, countIn)로 함수를 호출한다.

isAFactor(0, 1)을 호출하면 역 추적 할 수 있습니다.
루프에있는 main에 있습니다.

isAFactor(countOut, countIn)의 첫 번째 매개 변수는 바깥 쪽 for 루프에 할당됩니다 for (countOut = 0; ...

공지 사항 당신이 countOut를 초기화하는 값.

편집 1 :

Change your `isAFactor` function to: 

    if (inner == 0) 
    { 
     cerr << "Divide by zero.\n"; 
     cerr.flush(); 
     return 0; 
    } 
    if (outer % inner ... 

장소 위의 두 cerr 줄에 중단 점.
실행이 중지되면 스택 추적을 확인하십시오. 또한 좋은 디버거를 사용하면 추적의 각 지점에서 매개 변수/값을 검사 할 수 있습니다.

+0

'bool isAFactor (int int, int outer)'isAFactor (int outer, int inner) '로 변경했습니다. 더 이상 제로가되지 않습니다. 그러나 동일한 오류 메시지가 표시됩니다. – user2304913

+0

내 ** 편집 1 : **을 참조하십시오. 디버거를 사용하십시오. –

+0

고마워요. 이제 문제가있는 곳을 볼 수 있습니다. 그러나 나는 여전히 그것이 0으로 나뉘어지는 이유를 이해하지 못합니다. 나는 심지어 'if (inner == 0) {inner ++;}'를 시도했다. – user2304913

1

:

여기 내 코드입니다. inner가 제로 outer % inner 경우, 제로 오류에 의한 격차를 얻을 것이다 : 수행 할 때, @Aki Suihkonen의 의견을 명확히하기 위해 isAFactor(countIn, countOut)

+0

그래도 시도했지만 동일한 오류가 발생했습니다 ... 제안에 감사드립니다 – user2304913

+0

isAFactor를 isAFactor로 변경했습니다. (int 외부, int 내부)하지만 여전히 작동하지 않습니다 .... 여전히 동일한 오류 – user2304913

관련 문제