2016-07-04 11 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

誤った値をゼロにチェックすると、それはゼロにはならない 'm_a'です。ゼロは何でも分けることができますが、ゼロで除算することはできません。 –

+0

@Jägermeisterあなたはそれを後方に持っているようです。 'm_a'と' m_b'はクラスメンバーです。 'a'と' b'はパラメータであり、メンバを初期化するためだけに使用されます。この点に関しては、すべてがうまくいきます。 – Angew

+0

あなたの子供の数学の本の分数のセクションを確認する必要があります。これは分数を単純化する方法ではありません。 @Angew Uups。 – molbdnilo

答えて

1

m_numerという値が区画間で変更されます。あなたはdenom = 20numer = 10、ラインを持っている場合たとえば、

m_numer = m_denom % m_numer 

m_numer = 0を割り当てます。次に、m_denomの計算でゼロ除算が得られます。私は、例外を投げる代わりに、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場合で構築されたオブジェクトを持っていないその方法をお勧めします。

また、numeratorは小数部の先頭の名前であり、末尾の名前ではありません。

+0

ありがとう、それは問題でした。 – MrScriptX

+0

もしあなたが助けてくれれば、他の人が未解決の質問に時間を費やす必要がないように、回答を受け入れたとマークしていただければ幸いです。 – majk

関連する問題