2013-10-31 60 views
1

有人可以幫助解釋爲什麼當我乘以2的數字它返回0,但3和4號碼的作品?通過引用問題C++

我寫了一個類,但我只是不能看到它有什麼問題,謝謝。

功能是使用重載函數乘以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); 
} 
+2

不同的方法來解決此問題:一個函數具有默認參數,傳遞一個數字向量,等等。另外,您可能希望在您的'mult'函數中執行或不執行'cout << product'時保持一致。 – crashmstr

+0

感謝您的幫助,cout <<功能中的產品來自調試,我忘了將其刪除。 – Drakorex

回答

5

這是因爲你的控制結構執行該語句

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

即使你只打算MULT(產品,N1,N2)。只有兩個數字,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); 
    } 
+0

謝謝你,超快也 – Drakorex

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; 
} 
+0

我甚至沒有想過使用開關,謝謝! – Drakorex