0

セカンダリ関数に格納された値を DEV-C++ のメイン関数に返す単純な関数を作成しようとしていますが、なぜ機能しないのかわかりません:/

正しく実行されているはずですが、プログラムをコンパイルして実行すると、値の入力を求められず、0 と、入力された値が 0 の場合にステートメントに付随する文が表示されます。

// This program asks user to enter IQ score and then displays a message

#include<iostream>
using namespace std;

double getIQ();

int main()
{
    double iq = 0.0;

    getIQ();

    if (iq > 120)
    {
        cout << "You are a genius" << endl;
    }
    else
    {
        cout << "You don't need a high IQ to be a successful person" << endl;
    }

    system("pause");
    return 0;
}

double getIQ()
{
    double iq = 0.0;

    cout << "Enter IQ score: " << iq << endl;
    return iq;
}
4

3 に答える 3

3

次の戻り値を割り当てていない2つの問題がありますgetIQ()

 double iq = getIQ() ;

そして、あなたはで必要cinですgetIQ()

double getIQ()
{
    double iq = 0.0;

    cout << "Enter IQ score: " ;
    cin >> iq ;
    return iq;
}

また、使用しないことをお勧めします。System( "pause");system("pause")を参照してください。-なぜそれが間違っているのですか?使用しない場合は、 「名前空間stdを使用する理由」をusing namespace std;参照してください。C ++の悪い習慣と考えられていますか?

于 2013-03-20T02:23:33.073 に答える
2

あなたはとても近いです、

getIQ関数から返された値をiq:に格納する必要があります。

iq = getIQ();

これにより、によって返されたdoubleが前に設定しgetIQた変数に格納されます。iq

次のこともできます。

double iq = getIQ();

内容を表示するにはgetIQ、入力取得行を次のように変更する必要があります。

cout << "Enter IQ Score";
cin >> iq;
cout << endl;

ただし、数字を入力したかどうかを確認することを忘れないでください。

于 2013-03-20T02:22:26.067 に答える
1

問題は、getIQ() の戻り値を iq に割り当てておらず、getIQ() 関数がユーザー入力を受け取っていないことです。実際には、いくつかのリファクタリングを行うことで、その iq 変数を取り除くことができます: Inline temp (Martin Fowler のリファクタリングの本によると)。iq は getIQ() 関数の戻り値を保持する一時変数であるためです。これにより、エラーが発生するのを回避できます。一方、他の回答に示されているように、 getIQ() 関数がユーザー入力を返すようにする必要があります。

int main()
{
    if (getIQ() > 120)
    {
        cout << "You are a genius" << endl;
    }
    else
   {
       cout << "You don't need a high IQ to be a successful person" << endl;
   }

   cin.get();//you can use cin.get() in C++;
   return 0;
}
于 2013-03-20T02:29:38.523 に答える