2011-10-04 6 views
0

フラクショナルクラスのためにオーバーロードを処理していますが、処理する必要がある入力の種類がいくつかあります。例:1/2(標準小数点)、2 + 3/4(混合数)、2(整数)。教授は、整数の後ろにある2番目の文字が何であるかを知るためにpeek()関数を使う必要があると言っています。つまり、tempをintとして宣言する必要があるということですか?私の質問は、tempが整数の場合、残りの部分をどのように得るか(整数ではない場合)ですか?peek()を使用して入力ストリームをオーバーロードする

私の経験に基づいて、tempを文字列として宣言し、ピークを使用しません。しかし、intとpeekのアプローチは、教授が提案して以来、あるメリットがあるはずです。ここで

in >> temp; 
if (in.peek() == '+'){ 
    doSomething... 
} else if (in.peek() == '/'){ 
    doSomethingElse... 
} else { 
    doThirdOption 
} 

答えて

0

あなたがin>>tempを使用する場合、いくつかの数値以外の文字が検出されるまで、それはすべての数値を取得します。このとき、peek()を使用すると、次の文字が'+''/'かどうかを確認できます。
どちらの場合でも、入力ストリームから別の番号を読み込み、この手順を繰り返す必要があります。
ユーザーがEnterキーを押すと、すべての番号が取得され、必要な操作を実行できます。

また、分数の値を計算する必要がある場合は、intではなくfloatまたはdoubleのデータ型を使用する方がよい場合があります。

+0

いいえ、入力ストリームから次の数字、つまり+または/?の後の数字をどのように読み取るのか不思議です。私が既にtempを+または/の前の最初のintであるintとして宣言しているので、私には分かりません。 –

+0

それで、あなたができることは、各反復の終わりに値を追加できる合計変数を持つことです。同じ一時変数を使用してシンボルの後に入力を取得します。 –

関連する問題