2017-03-04 62 views
0

我的C++程序在代碼塊中給出了正確的結果,但在visual basic 2005 express edition中給出了不正確的結果。任何人都可以請指導我做什麼我做錯了:)謝謝:) 這裏是我的程序找到使用函數的階乘。我的C++程序在代碼塊中給出了正確的結果,但在visual basic 2005 express版本中給出了不正確的結果

#include <iostream> 
using namespace std; 

int fact(int a) 
{ 
    if (a>1) 
    return a*fact(a-1); 
} 
int main() 
{ 
    cout<<"Enter a number to find its factorial : "; 
    int a; 
    cin>>a; 
    cout<<"Factorial of "<<a<<" is "<<fact(a)<<endl<<endl; 
} 

結果的代碼塊

Enter a number to find its factorial : 5 
Factorial of 5 is 120 

結果在Visual Basic 2005 Express Edition的

Enter a number to find its factorial : 5 
Factorial of 5 is -96 
+0

你什麼回報,如果一個'<= 1'?哎呀。 – PaulMcKenzie

+0

在codeblocks,使一個<= 1只是返回輸入的號碼尋找階乘,並在vb快遞2005年它給出了意想不到的結果:) – Romeo

+0

請閱讀我的答案。問題是你沒有從應該返回一個值的函數返回一個值。無論函數做什麼,這都是未定義的行爲。 – PaulMcKenzie

回答

1

代碼的行爲是不確定的。

如果a <= 1fact函數中,則無法返回值。未能返回值會導致未定義的行爲,因此會看到不同的結果。

修正應該是:

int fact(int a) 
{ 
    if (a>1) 
     return a*fact(a-1); 
    return 1; 
} 
+0

謝謝PaulMcKenzie :)現在它在vb 2005中工作正常:) – Romeo

+0

你可能還沒有看到這個問題。使用的編譯器無關緊要 - 行爲或原始程序未定義。未定義意味着任何答案都可能已經被顯示,程序可能已經崩潰,並且是的,甚至可能已經打印了「正確的」答案。防止這種情況的方法是編寫代碼,以便行爲定義良好。 – PaulMcKenzie

+0

確定:)謝謝:) – Romeo

相關問題