2017-03-10 13 views
0

私はC++を新しく使い、Do-Whileループを使用して1からnまでの合計を計算するプログラムを作成しようとしましたが、nは入力パラメータで、 nの階乗を計算するforループの階乗関数。しかし、プログラムがコンパイルされると、次のような結果が得られます。C++プログラムで正しい階乗値が返されない

合計1からn(この例ではnは5)は、001ED2A8またはその他の奇妙な数字と文字の組み合わせです。私の階乗結果についても同じことが起こります。私が得ることができるすべての助けに感謝します。ここで私はこれまで持っているものです。

#include "stdafx.h" 
#include <iostream> 
using namespace std; 

int total(int); 
int factorial(int); 

void main() 
{ 
    int n; 
    cout << "Please enter a positive number:"; 
    cin >> n; 
    cout << "The total from 1 to " << n << "is " << total << endl; 
    cout << "The factorial of " << n << " is: " << factorial << endl; 
} 

int total (int n) 
{ 
    int i, total; 

    total = 0; 
    i = 1; 
    do 
    { 
     total = total + i; 
     i = i + 1; 
    } while (total <= n); 
    return total; 
} 

int factorial (int n) 
{ 
    int product = 1; 

    for (;n>0; n--) 
    { 
     product = n * product; 
    } 
    return product; 
} 
+2

デバッガ。デバッガを使用します。デバッガを使用すると、個々のステートメントを個別に実行し、変数の値を監視することができます。デバッガを使用すると、StackOverflowに投稿して誰かがあなたのためにデバッガを使用するのを待っているよりもずっと**高速です**。 –

+6

'main'の返り値は' void'ではなく 'int'でなければなりません。私は関数を呼び出す方法を読むことをお勧めします。関数ポインタを表示するだけです。 –

答えて

0
long factorial (int n) 
{ 
if (n >= 1) 
    return n*factorial(n-1); 
else 
    return 1; 
} 

または

for(i=1,f=1;i<=n;i++) 
{ 
    {f=f*i;} 
} 
+0

この質問は、単に働くコードではなく、*説明*を探しています。あなたの答えは質問者のための洞察を提供せず、削除されるかもしれません。観察された症状の原因を説明するために[編集]してください。 –

0

あなたは

cout << "The total from 1 to " << n << "is " << total << endl; 

を使用する場合、それは

int (*function_ptr)(int) = total; 
cout << "The total from 1 to " << n << "is " << function_ptr << endl; 
と同等ですが、次のようにforループを使用します

関数ポインタ〜operator<<をの呼び出しで返されたの値ではなく、に渡しています。

この場合、関数ポインタはブール値trueに変換されます。したがって、その呼び出しは次のようになります。

cout << "The total from 1 to " << n << "is " << true << endl; 

同じことが次の行で起こります。

これらの関数が返す値を出力するには、関数呼び出しを行う必要があります。用途:

cout << "The total from 1 to " << n << "is " << total(n) << endl; 
cout << "The total from 1 to " << n << "is " << factorial(n) << endl; 

また、あなたはintmainの戻り値を変更する必要があります。

int main() 
{ 
    ... 
} 
+0

ああ、それはプログラムのエラーでした。私はその関数呼び出しを行い、今は正しく機能しています。あなたの助けと明確な説明をありがとう。 – mazeem74

+0

@ mazeem74、よろしくおねがいします。 –

0
To use a for loop as follows: 
int f=1, i=1; 
for(i=1,f=1;i<=n;i++) 
{ 
    {f=f*i;} 
} 
+4

この質問は、単に作業用コードではなく、*説明*を探しています。あなたの答えは質問者のための洞察を提供せず、削除されるかもしれません。観察された症状の原因を説明するために[編集]してください。 –

関連する問題