1

2つの数字を掛けると0が返るのに、3つと4つの数字が機能する理由を誰かが説明してくれますか?

クラスのためにこれを書きましたが、何が問題なのかわかりません、ありがとう。

関数は、オーバーロードされた関数を使用して 2、3、または 4 の数値を乗算し、参照によって積を渡すことです。

#include <iostream>
using namespace std;

void mult(int& product, int n1, int n2);
void mult(int& product, int n1, int n2, int n3);
void mult(int& product, int n1, int n2, int n3, int n4);

int main() {
    int product, n1, n2, n3, n4;
    char ans;

    do {
        product = 0;
        n1 = 0;
        n2 = 0;
        n3 = 0;
        n4 = 0;
        cout << "Enter 2-4 numbers to multiply\n";
        cout << "First number: ";
        cin >> n1;
        cout << "Second number: ";
        cin >> n2;
        cout << "Enter a 3rd number? (y/n):";
        cin >> ans;

        if (ans == 'y') {
            cout << "Third number: ";
            cin >> n3;
            cout << "Enter a 4th number? (y/n):";
            cin >> ans;
        } else {
            mult(product, n1, n2);
        }

        if (ans == 'y') {
            cout << "Fourth number: ";
            cin >> n4;
            mult(product, n1, n2, n3, n4);
        } else {
            mult(product, n1, n2, n3);
        }

        cout << "The product is " << product << endl << n1 << n2 << n3 << n4;
        cout << "Would you like to calculate another? (y/n):";
        cin >> ans;

    } while (ans == 'y');
}

定義

void mult(int& product, int n1, int n2)
{
    product = (n1 * n2);
    cout << product;
}
void mult(int& product, int n1, int n2, int n3)
{
    product = (n1 * n2 * n3);
}
void mult(int& product, int n1, int n2, int n3, int n4)
{
    product = (n1 * n2 * n3 * n4);
}
4

2 に答える 2

5

これは、制御構造がステートメントを実行するためです

else{mult(product,n1,n2,n3);}

mult(product,n1,n2) だけを意図した場合でも。数値が 2 つしかない場合、n3 は 0 になります。したがって、結果もゼロになります。

次のように再構築することで解決できます。

   cout << "Enter a 3rd number? (y/n):";
    cin >> ans;

    if (ans == 'y') {
        cout << "Third number: ";
        cin >> n3;
        cout << "Enter a 4th number? (y/n):";
        cin >> ans;
        if (ans == 'y') {
            cout << "Fourth number: ";
            cin >> n4;
            mult(product, n1, n2, n3, n4);
        } else {
            // Three numbers
            mult(product, n1, n2, n3);
        }
    } else {
        // Two numbers
        mult(product, n1, n2);
    }
于 2013-10-31T14:27:17.883 に答える
2

条件が正しく設定されていません:

if (ans == 'y') 
{
        cout << "Third number: ";
        cin >> n3;
        cout << "Enter a 4th number? (y/n):";
        cin >> ans;
}
else
{
    mult(product, n1, n2); // product is set here correctly for 2 numbers
}

if (ans == 'y') // ans is STILL 'n' here
{
    cout << "Fourth number: ";
    cin >> n4;
    mult(product, n1, n2, n3, n4);  
}
else
{
    mult(product, n1, n2, n3); // this overwrites the correct product with 0 because n3 is 0
}

これは学術的な演習であると想定しているため、より単純なアプローチは次のようになります。

int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    int product = 0;

    unsigned short cnt = 0;

    do
    {
        std::cout << "Enter the number of operands (2-4):  ";
        if (!(std::cin >> cnt))
        {
            std::cin.clear();
            std::cout << "Invalid number of operands!" << std::endl;
        }

    } while (cnt < 2 || cnt > 4); 

    std::cout << "Please enter your operands:  ";

    switch (cnt)
    {
    case 2:
        {
            std::cin >> a >> b; // error checking left out for simplicity
            mult(product, a, b);
            break;
        }
    case 3:
        {
            std::cin >> a >> b >> c;
            mult(product, a, b, c);
            break;
        }
    case 4:
        {
            std::cin >> a >> b >> c >> d;
            mult(product, a, b, c, d);
            break;
        }
    }

    std::cout << "Product is " << product << std::endl;      

    return 0;
}
于 2013-10-31T14:27:50.120 に答える