2017-03-04 1 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エディション

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

あなたは何を返すのですか?おっとっと。 – PaulMcKenzie

+0

をcodeblocksに入れて、<= 1とすると、階乗を求めるために入力した数字が返され、vb 2005では予期しない結果が出ます:) – Romeo

+0

私の答えをお読みください。問題は、値を返す関数から値を返すことに失敗していることです。関数が何をしているかにかかわらず、それは未定義の振る舞いです。 – PaulMcKenzie

答えて

1

にあなたのコードの動作は未定義です。

factファンクションのa <= 1の場合、値を返すことができませんでした。値を返さないと、定義されていない動作が発生し、異なる結果が表示されます。

補正をする必要があります: `<= '1'場合

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

ありがとうPaulMcKenzie :)今はvb 2005でうまく動作します:) – Romeo

+0

あなたはまだ問題が表示されないことがあります。使用したコンパイラは問題ではありません。動作または元のプログラムは未定義です。未定義とは、すべての回答が表示されている可能性があり、プログラムがクラッシュしている可能性があり、「正しい」回答が印刷されている可能性があることを意味します。これを防止する方法は、コードを記述してその振る舞いが明確になるようにすることです。 – PaulMcKenzie

+0

ok :)ありがとう:) – Romeo

関連する問題