2013-08-31 21 views
5

私は自分のクラスの練習プログラムを作成しました。変数の値を返す以外はすべてが機能します。私の質問は、なぜそれが価値を返すのではないかということです。ここでは、関連していないコードの大部分をコピーして貼り付けることを避けるために書いたサンプルコードを示します。戻り値が変数値を返さない

#include <iostream> 
using std::cout; using std::cin; 
using std::endl; using std::fixed; 

#include <iomanip> 
using std::setw; using std::setprecision; 

int testing(); 

int main() 
{ 
    testing(); 

    return 0; 

} 

int testing() { 
    int debtArray[] = {4,5,6,7,9,}; 
    int total = 0; 

    for(int debt = 0; debt < 5; debt++) { 
    total += debtArray[debt]; 
    } 

    return total; 
} 
+2

そのコードは単に戻り値を破棄します。 'testing();'を 'std :: cout << testing();'に変更して、何か取得していないか確認してください。 –

+1

'testing'関数は本当に値を返します。しかし、コールの値を単に破棄するだけです。何が起こると思いますか? –

+1

* "ここには、関連していないコードの大部分をコピーして貼り付けることを避けるために書いたサンプルコードがあります。" * - それに感謝します。 –

答えて

9

は、実際には、機能は、値を返すあります。ただし、main()はその戻り値を無視することを選択しています。

あなたmain()に次のように試してみてください。

int total = testing(); 
std::cout << "The total is " << total << std::endl; 
2

あなたのコードは完璧ですが、それが機能testing() によって返される値は、これがされているデータを保持する、
これを試してみてください取るしませんtesting()関数によって返されます

#include <iostream> 
using std::cout; using std::cin; 
using std::endl; using std::fixed; 

#include <iomanip> 
using std::setw; using std::setprecision; 

int testing(); 

int main() 
{ 
    int res = testing(); 
    cout<<"calling of testing() returned : \t"<<res<<"\n"; 
    return 0; 

} 

int testing() { 
    int debtArray[] = {4,5,6,7,9,}; 
    int total = 0; 

    for(int debt = 0; debt < 5; debt++) { 
    total += debtArray[debt]; 
    } 

    return total; 
} 
4

この関数は値を返します。 戻り値が画面に表示されないため、値が返されないと思われる理由は

3

Returnprintと等価ではありません。関数がstdoutに表示するために戻った値を必要とするならば、それを行う方法が必要です。これは

4

testing()メインまたは関数自体のいずれかstd::coutを使用して返された値と<<オペレータを印刷することによって達成されるは値を返しんが、値が使用されるか、または任意の場所に保存されません。あなたはusing std :: cout、std :: cin、std :: endlなどですが、を使用していません。あなたがしたかったことは、totalと表示されていたと仮定しています。そのためのプログラムはなりますよう:

#include <iostream> 
using std::cout; 
using std::endl; 

int testing(); 

int main() { 
    int totaldebt = testing(); 
    cout << totaldebt << endl; 

    return 0; 
} 

int testing() { 
    int debtArray[] = {4,5,6,7,9}; 
    int total = 0; 

    for(int debt = 0; debt < 5; debt++) { 
     total += debtArray[debt]; 
    } 

    return total; 
} 

main()内(どのような方法で最適化しないコンパイラを想定)されて、あなたのコード内で何が起こっている、と呼ばれtesting()は、その後、プログラムをその指示を通過し、上に移動します。 printf<cstdlib>から呼び出すと同じことが起こります。 printfは、表示する文字数を返すことになっていますが、結果をどこにも保存しないと、テキストが表示されてプログラムが続行されます。

あなたが実際に利用している以上にusing以上の理由を聞かなければならないのは何ですか?それとも完全コードではないのですか?

+0

完全なコードではありません。 – ExpletiveDeleted

+0

@ExpletiveDeletedああ、大丈夫、私は、あなたが実際に使ったことがないほどたくさんのものを「使用している」と言っていたでしょう。 –

関連する問題