2016-09-30 4 views
-2

ユーザーから入力を受け取り、入力用のパラメータなしで関数に直接渡す方法はありますか?関数に直接入力しますか?

私は2つのプロパティ、分子と分母(両方の整数)を保持する "Fraction"という名前の構造体を使用するプログラムを持っています。私はこのような何かを行うことができるようにしたい:

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

あなたはパラメータ化機能せず、ユーザからの入力を服用について質問が、あなたの例では、あなたが聞いているの引数を持つ関数を使用して示したが、「私はこれを行うことができますか?」私はどのアプローチがあなたに求めているのかは分かりません。

はい、あなたの例で示したことはできますが、この場合はパラメータ付きの関数を使用しています。ユーザがstdinから2つの整数を入力すると予想するには、readを実装する必要があります(または、処理する前にユーザから2つの整数しか予想していないことを、

パラメータなしで関数に何も渡すことはできません。あなたができることは、あなたのreadprint関数が認識しているグローバル変数を使用することですが、グローバルを回避して代わりに関数呼び出しの引数としてデータを渡すことが望ましいです。

編集: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; 
} 
関連する問題