簡體   English   中英

C++ 函數,按引用傳遞

[英]C++ functions, pass by reference

我在調用函數時將參數作為參考傳遞時遇到問題。 我們將使用以下指令構建一個程序:

通過編寫以下函數的函數定義和函數原型來完成上述程序:

displaymenu此函數接受 num1 和 num2 作為通過引用傳遞的參數,並返回一個字符作為輸出。 該函數顯示菜單並接受以下用戶給定的輸入:

 A num1 B num1 num2 Q

checkeven如果參數為偶數,則此函數返回 TRUE。 否則函數返回 FALSE。

divisible如果第一個參數 num1 可以被第二個參數 num2 整除,則此函數返回 TRUE。

到目前為止,這是我的代碼並在傳遞參數時出錯。

#include <iostream>

using namespace std;
int num1, num2 = 0;
char displaymenu(int num1, int num2);
bool checkeven (int num1);
bool divisible (int num1, int num2);

int main(){
    int num1, num2 = 0;
    char choice;
    do{
       choice = displaymenu(num1,num2);    
       if (choice == 'A'){
           if (checkeven(num1))
               cout << num1 << " is even." << endl;
           else 
                cout << num1 << " is odd." << endl;
       }          
       else if (choice == 'B'){
          if (divisible(num1, num2))
              cout << num1 << " is divisible by " << num2 << endl;
          else
              cout << num1 << " is not divisible by " << num2 << endl;
       }
       else if (choice == 'Q')
            cout << "Bye!" << endl;
       else 
            cout << "Illegal input" << endl;
       
    }while (choice != 'Q');
    return 0;
}

char displaymenu(int &num1 = num1, int &num2 = num2){
    char choice;
    cout << '+' << "______________________________" << '+' <<endl;
    cout << '|'<<"Choose an option: " <<"            |"<<endl; 
    cout << '|'<<"    A: Check if even          |" <<endl;
    cout << '|'<<"    B: Check if divisible     |" <<endl;
    cout << '|'<<"    Q: Quit                   |" <<endl;
    cout << '+' << "______________________________" << '+' <<endl;
    cout << "   Reply: ";
    cin>> choice>> num1>> num2;
    return choice;
    }

bool checkeven(int num1){
    if (num1 % 2 == 0)
        return true;
    else
        return false;
    } 

bool divisible(int num1, int num2){
    
    if (num1 % num2 == 0)
        return true;
    else
        return false;
    }

我不會用完整的解決方案來回答(您可以自由改進您的問題,以便稍后獲得更好的答案),但關於問題標題,這里有一些提示。

您的聲明

char displaymenu(int num1, int num2);

和你的定義

char displaymenu(int &num1 = num1, int &num2 = num2)

應該有相同的簽名。 為了傳遞引用,將聲明更改為

char displaymenu(int &num1, int &num2);

此外,由於您通過引用傳輸值,您應該擺脫全局變量int num1, num2 = 0; using namespace std;下方using namespace std; . 他們不再需要了。 然后,通過刪除(不工作)標准值分配來修復displaymenu函數定義。 在那之后,至少編譯器應該接受你的代碼,只是當你執行它時它在某些情況下不會真正起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM