2015-04-23 60 views
-3

我新的C++,並在大學課程學習它,我們剛剛啓動的功能,這是我與他們打交道的第一實驗室。我在switch語句中一直收到每個case的這個錯誤,我不知道如何糾正它。錯誤:參數太少運作

error: too few arguments to function 'void addFraction(int, int, int, int)'

#include <iostream> 
#include <cstdlib> 

using namespace std; 

void clearScreen(); 
void printMenu(); 
void getFraction(int&, int&); 
void addFraction(int, int, int, int); 
void subFraction(int, int, int, int); 
void mulFraction(int, int, int, int); 
void divFraction(int, int, int, int); 
//void reducFraction(int &, int &); 

int main() 
{ 
    clearScreen(); 
    printMenu(); 
    return 0; 
} 

//Function clears the screen 
void clearScreen() 
{ 
    cout << string(50, '\n'); 
} 

//Function prints a menu to the screen 
void printMenu() 
{ 
    int menu; 

    cout << "Fraction Calculator\n"; 
    cout << "\n"; 
    cout << "1. Add Fraction\n"; 
    cout << "2. Subtract Fraction\n"; 
    cout << "3. Multiply Fraction\n"; 
    cout << "4. Divide Fraction\n"; 
    cout << "5. Quit\n"; 
    cout << ":"; 
    cin >> menu; 

    //Switch statement that drive the menu 
    switch (menu) 
    { 
     case '1': addFraction(); 
        break; 
     case '2': subFraction(); 
        break; 
     case '3': mulFraction(); 
        break; 
     case '4': divFraction(); 
        break; 
     case '5': exit(0); 
        break; 
     default: { 
        cout << endl << "Invalid choice\n" << endl; 
        printMenu(); 
        } 
    } 

} 

void addFraction(int f1n, int f1d, int f2n, int f2d) 
{ 
    clearScreen(); 
    getFraction(f1n, f1d); 
    getFraction(f2n, f2d); 
    int fan, fad; 
    fan = (f1n * f2d) + (f2n * f1d); 
    fad = (f1d * f2d); 
    //reducFraction(); 
    cout << fan << endl << "---" << endl << fad; 
} 

void subFraction(int f1n, int f1d, int f2n, int f2d) 
{ 
    clearScreen(); 
    getFraction(f1n, f1d); 
    getFraction(f2n, f2d); 
    int fan, fad; 
    fan = (f1n * f2d) - (f2n * f1d); 
    fad = (f1d * f2d); 
    //reducFraction(); 
    cout << fan << endl << "---" << endl << fad; 
} 

void mulFraction(int f1n, int f1d, int f2n, int f2d) 
{ 
    clearScreen(); 
    getFraction(f1n, f1d); 
    getFraction(f2n, f2d); 
    int fan, fad; 
    fan = (f1n * f2n); 
    fad = (f1d * f2d); 
    //reducFraction(); 
    cout << fan << endl << "---" << endl << fad; 
} 

void divFraction(int f1n, int f1d, int f2n, int f2d) 
{ 
    clearScreen(); 
    getFraction(f1n, f1d); 
    getFraction(f2n, f2d); 
    int fan, fad; 
    fan = (f1n * f2d); 
    fad = (f2n * f1d); 
    //reducFraction(); 
    cout << fan << endl << "---" << endl << fad; 
} 

void getFraction(int& numerator, int& denominator) 
{ 
    cout << "Please enter a numerator: "; 
    cin >> numerator; 

    cout << "Please enter a denominator: "; 
    cin >> denominator; 

    while(denominator == 0) 
    { 
     cout << "Invalid denominator! Enter a new one: "; 
     cin >> denominator; 
    } 
    clearScreen(); 
} 
+0

要調用的所有功能,而不給他們任何數字上 – user7

+1

工作在你的switch語句嘗試調用的函數,而無需指定四個參數的函數需要:即你只需要調用'addFraction();'。你需要獲得一些值作爲參數傳遞...也許從鍵盤/'std :: cin',或硬編碼的東西開始.... –

+0

我可以做什麼像'addFraction(0,0,0,0)'? – dbs1crew

回答

1

嘗試:

case '1': 
    addFraction(1, 2, 3, 4); 
    break; 

在你的代碼下的評論中提到,你打電話與未聲明的變量的方法。

0

調用函數時請輸入參數值。 例子:

case '1': addFraction(1,2,3,4); 
       break; 
0

你已經宣佈你addFraction功能,使得它有四個參數。

void addFraction(int f1n, int f1d, int f2n, int f2d) 

在switch語句中調用它時,您提供了0個參數。

addFraction(); 

您必須傳遞函數4參數。例如,下面是一個有效的電話:你使用

addFraction(1, 2, 3, 4); 
0

所有的功能都已經參數傳遞,而當你從交換機的情況下調用的函數,你不傳遞任何參數。

,你將不得不採取從用戶的分數,然後再調用函數,其對分數進行操作。

  1. 詢問了分數的用戶。
  2. 調用時使用分數值進入函數。

案例'1':
addFraction(1,2,3,4);
break;

1

而函數聲明爲多個參數

void addFraction(int, int, int, int); 
void subFraction(int, int, int, int); 
void mulFraction(int, int, int, int); 
void divFraction(int, int, int, int); 

必須提供所需的功能,來電參數您調用的函數不帶任何參數

switch (menu) 
{ 
    case '1': addFraction(); 
       break; 
    case '2': subFraction(); 
       break; 
    case '3': mulFraction(); 
       break; 
    case '4': divFraction(); 
       break; 
    case '5': exit(0); 
    //... 

事實上,你可以不帶參數聲明的功能。例如,

void addFraction() 
{ 
    int f1n, f1d; 
    int f2n, f2d; 

    clearScreen(); 

    getFraction(f1n, f1d); 
    getFraction(f2n, f2d); 

    int fan, fad; 

    fan = (f1n * f2d) + (f2n * f1d); 
    fad = (f1d * f2d); 

    //reducFraction(); 
    cout << fan << endl << "---" << endl << fad; 
} 

以同樣的方式可以定義(和聲明)其他函數。

+0

我最終不得不建立在此代碼之上,因此我可能會廢棄很多代碼,並隨您的建議去做。感謝您的輸入! – dbs1crew

+0

@ dbs1crew您的每個函數都會自行詢問需要的值。所以沒有必要用參數聲明它們。在我播種的每個函數中聲明相應的局部變量就足夠了。 –