2016-09-30 37 views
-2

有沒有什麼辦法可以從用戶那裏接受輸入,並將它直接傳遞給一個沒有輸入參數的函數?直接輸入一個函數?

我有一個程序,使用一個名爲「分數」,其中包含2個屬性,分子和分母(都是整數)的結構。我希望能夠做這樣的事情:

fraction a; 

cout << "Enter a fraction "; //User inputs something like "1/2" 
read(a); // "1/2" is read into the fraction struct a, num = 1 and den = 2 
cout << "You entered "; 
print(a); 
cout << endl; 

我能做到這一點還是需要存儲在單獨的變量的分子和分母,並將其傳遞給read功能?

感謝

+0

*它直接傳遞到一個沒有參數輸入的函數* ..什麼? –

+0

所以我想這是一個否 –

+0

不,它只是意味着「什麼?」。這個問題還不清楚。 –

回答

0

你問關於採取由用戶輸入不帶參數的功能,但你的例子展示了使用功能與您問的論點,「我能做到這一點?」我不確定你問的是哪種方法。

是的,你可以做你在例子中顯示的東西,但在這種情況下,你正在使用帶參數的函數。你需要實現read以使用cin來期望用戶通過stdin輸入兩個整數(或者在繼續之前,某個任意函數如何知道用戶預期了兩個且僅有兩個來自用戶的整數?)。

你不能將任何東西傳遞給沒有參數的函數。你可以做的是使用你的函數所知道的全局變量,但最好避免使用全局變量,而是將數據作爲參數傳遞給函數調用。

編輯:查看Thomas的替代使用cin的答案。

3

我建議在您的Fraction類中重載operator >>

class Fraction 
{ 
    int numerator; 
    int denominator; 
    friend std::istream& operator>>(std::istream& input, Fraction& f); 
}; 

std::istream& operator>>(std::istream& input, Fraction& f) 
{ 
    // Read numerator 
    input >> f.numerator; 

    char slash; 
    input >> slash; 

    // Read the denominator 
    input >> f.denominator; 

    return input; 
} 

過載將允許你寫這樣的代碼:

Fraction f; 
std::cin >> f; 

有很多選擇,比如有一個功能,讀取數據:

void Read_Fraction(std::istream& input, 
        int& numerator, 
        int& denomenator) 
{ 
    char slash; 
    input >> numerator >> slash >> denominator; 
} 
相關問題