0

複素数を入力し、オーバーロードされた演算子を使用して実部と虚部の解析を処理しようとしています。のような数字を入力すると、 と1 + 2iが必要real = 1になりimaginary = 2ます。

今、Enter を入力1 + 2iすると、出力は1 + 0i. これを適切に行うにはどうすればよいですか(Numberにはプライベートデータメンバーがrealありimaginaryoperator>>フレンド機能です)

//input the form of 1 + 2i
istream & operator>>(istream &in, Number &value)
{    
    in >> std::setw(1) >> value.real;
    in.ignore(3); //skip 'space' and '+' and 'space'
    in >> std::setw(1) >> value.imaginary;
    in.ignore(); //skip 'i'

    return in;
}


//output in the for 1 + 2i
ostream &
operator<<(ostream &out, const Complex &value)
{
    out << value.real << " + " << value.imaginary << "i" <<std::endl;

    return out;
}
4

1 に答える 1

1

あなたのコードは私のコンパイラでうまく機能します!おそらく問題は他の場所(たとえば出力)にありますか?

std::setw入力ストリームから数値を抽出する場合、これは効果がないことに注意してください。

フォームのケースも検討することをお勧めします。A - Biユーザーがオペレーターまたはの周囲に余分なスペースを挿入したり、スペースを削除したりする場合もありますi。しかし、単純なケースではA + Bi、プロトタイプが問題になることはありません。

于 2013-02-09T16:52:48.123 に答える