2017-05-31 60 views
-5

沒有要求的解決方案或任何事情,只是一個一般性的問題。當getgcd()函數被調用時,我得到一個浮點異常。爲什麼是這樣?我已經研究過這個,並且找不到直接的答案。謝謝,下面還有我正在使用的代碼。爲什麼我得到一個「浮點異常」

#include <iostream> 
using namespace std; 

class D: public E { 
private: 
     int var2; 

public: 

     D(int var, int var2) : E(var) { 
       var2 = var2; 
     } 

     void getgcd() { 
       int temp; 
       int newVar = E::var; 
       while (var != 0) { 
         temp = newVar % var2; 
         newVar = var2; 
         var2 = temp; 
       } 
       cout << "The GCD of " << newVar << " and " << var2 << " is " << var2 << endl; 
     } 
}; 

#include <iostream> 
#include "A4p2.cpp" 
#include "A4p3.cpp" 
using namespace std; 

int main(int argc, char *argv[]) { 
     int x, y; 
     x = atoi(argv[1]); 
     y = atoi(argv[2]); 

     if (x < 1 || x > 50) { 
       cout << "Input must be between 1-50" << endl; 
       exit(0); 
     } 

     E test(x); 
     D test1(x, y); 
     test.play(); 
     test1.getgcd(); 
     return 0; 
} 
+4

'#包括 「A4p2.cpp」 的#include 「A4p3.cpp」'只要別做! –

+0

你可以包括你的完整代碼,包括你的'類E'的定義是什麼? – callyalater

+0

是的,這是一個任務,但任務還沒有結束浮點異常,我只是碰到它跑的決定要求。稍微寬鬆一點 – kprog

回答

2

Linux的不幸整數除法 /模數通過零上SIGFPE映射,然後將其天真地打印輸出爲「浮點異常」。我不認爲我見過它(零個總是在x86故障可能是因爲大多數FP例外必須明確開啓,同時整數除法)浮點運算的到來。

最大的可能是你在

temp = newVar % var2; 

var2等於零這反過來又可能是由一個事實,即,在循環中,你正在檢查var但使用/修改var2引起的。

while (var != 0) { 
     temp = newVar % var2; 
     newVar = var2; 
     var2 = temp; 
} 

您可能想要while (var2 != 0)

相關問題