2016-07-04 1 views
0

C++로 fraction을 구현하는 프로그램을 만들었습니다. 나는 그것이 집에서 따르고있는 C++ 수업에서 일종의 숙제이기 때문에 만들었습니다. 프로그램은 컴파일되지만 실행 된 후 빨리 충돌합니다. 나 스스로 답을 찾고, 내가 발견 한 모든 것은 새로운 물체가 생성 될 때 충돌한다는 것이다. 다음은 잘못된 코드입니다.내 프로그램이 작동하지 않아 이유를 찾을 수 없습니다

//a and b are for the numerators and denominator in the fraction: a/b 
ZFraction::ZFraction(int numer, int denom):m_numer(numer), m_denom(denom)//this constructor made it crash 
{ 
    if(m_numer != 0) 
    { 
     m_numer = m_denom % m_numer; 
     m_denom = m_denom/m_numer; 
    } 
    else 
    { 
     cout << "Fraction impossible"; 
    } 
} 

왜 충돌이 발생합니까? 미리 감사드립니다.

+7

잘못된 값을 0으로 확인하면 'm_a'가 0이 될 수 없습니다. 0은 아무 것도 나눌 수 있지만 0으로 나눌 수있는 것은 없습니다. –

+0

@ Jägermeister 당신은 거꾸로 가지고있는 것 같습니다; 'm_a'와'm_b'는 클래스 멤버입니다. 'a'와'b'는 멤버를 초기화하는 데만 사용되는 매개 변수입니다. 이 점에서 모두 잘합니다. – Angew

+0

어린 시절 수학 서적에서 분수 섹션을 검토해야합니다. 그것은 당신이 분수를 단순화하는 방법이 아닙니다. – molbdnilo

답변

1

m_numer의 값이 부분간에 변경됩니다. 당신이 denom = 20numer = 10 라인이있는 경우 예를 들어,

m_numer = m_denom % m_numer 

m_numer = 0을 할당합니다. 그런 다음 m_denom 계산에서 0으로 나눗셈을 얻습니다. 나는 예외를 던지는 대신 cout을 쓰기 고려, 보조 노트에 즉

ZFraction::ZFraction(int numer, int denom):m_numer(numer), m_denom(denom) 
{ 
    if(numer != 0) 
    { 
     m_numer = denom % numer; 
     m_denom = denom/numer; 
    } 
    else 
    { 
     cout << "Fraction impossible"; 
    } 
} 

, 원래의 값으로 계산을하고 당신이 가짜 값 numer == 0 경우와 건설 객체가되지 않습니다 그 방법을 제안합니다.

또한 분자는 분수의 맨 위와 맨 아래의 이름입니다.

+0

고맙습니다. 그게 문제였습니다. – MrScriptX

+0

도움을 주신다면 다른 사람들이 해결되지 않은 것으로 보이는 질문에 시간을 할애하지 않아도되도록 답을 표시했으면 감사하겠습니다. – majk

관련 문제