2017-10-12 5 views
1

num1の値が0になるのはなぜですか?分かりません。どのようにgetScoreファンクションにnum1を渡して、cinを使用しても値は変更されませんか? cinscoreに基づいて値を変更するにはどうすればよいですか。void関数を使用してmain関数の変数の値を設定します

#include <iostream> 
using namespace std; 

void getScore(double); 

int main(int argc, const char * argv[]) { 
    double num1; 
    getScore(num1); 
    cout << "NUM 1 got set to " << num1 << endl; 
    return 0; 
} 

void getScore(double score) { 
    cout << "whats the score"; 
    cin >> score; 
    cout << "num is " << score << endl; 
} 
+2

あなたは参照とポインタ – Xatyrian

+2

を見ている必要がありますか? –

答えて

5

を参照してください。つまり、scorenum1の値をコピーした新しい変数です。

あなたがここで起きたがっていることは、参考としてnum1を渡すことです。それはそうのような関数を宣言して定義することによって行われます。

void getScore(double&); 

void getScore(double& score) { 
    cout << "whats the score"; 
    cin >> score; 
    cout << "num is " << score << endl; 
} 

アンパサンド(&)は、変数ではなく、変数に格納された値のコピーへの参照を渡していることを意味します。参照を渡すと、scorenum1の一種の「ニックネーム」になります。つまり、値をscoreに設定すると、その値は実際にはnum1に設定されます。あなたはvoid関数を使用しないのはなぜ

http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/

2

機能は一般に値を評価するものとして理解されます。このことを念頭に置いてあなたがあなたの関数を書き換えるかもしれません:あなたの関数でreturn文によって生成される値にアクセスするには

double getScore(){ // crap and other stuff... + a return } 

、あなたは単にそれを割り当てる必要があります。

double theInputtedScore = getScore(); 

この機能は前の割り当てを満たします。

double getScore(){ return 2.71; } 

あなたが望むものを書くのに何百万もの方法があります。私はyoutubeビデオから離れてあなたの教科書に固執することを提案したいと思います。

書き込み時

getScore(double value)

これは、数値が関数の入力であると一般的に理解されています。あなたはそれを望んでいません。

+0

関数がパラメータとしてdoubleをとるとき、 'theInputtedScure = getScore();'はどのように動作しますか? – Omar

+0

これは、doubleを返すようにして関数のプロトタイプを変更し、 'double getScore(){double value; cin >> value;戻り値;} '私はその実装を気にしません。私はすでにそれを行う方法を知っています。あなたの答えはofftopicです。 – Omar

+1

@Omar、Captain Giraffeが作っている点は、関数を持っていれば、変更する変数を与える代わりに値を返すことが、ほとんどのC++プログラマーにとってより直観的だということです。'getScore(num1)'を呼び出す代わりに、その関数を変更し、 'num1 = getScore()'を呼び出すことを提案しています。 –

2

引数を値渡しすると(ここでのように)、関数はそれ自身のコピーを作成します。したがって、getScore()でローカルコピーに書き込むと、関数の終了時にコピーが破棄されます。

はあなたが値によってnum1を通過したPassing arguments by value

関連する問題