1

これは、C++を使用した原則と実践からの演習であり、if チェックを使用して基本的な通貨コンバーターを作成し、スイッチで再作成しました。または私の中間スイッチを除いて、すべてがかなりうまく動作します。プログラムの残りの部分のようには機能しないようです。111y、111pなどのデータを入力しても、他のすべてのデータは問題ありませんが、ユーロを使用する場合は、空白が必要です。そうしないと、デフォルトのスイッチに移動します。ブレークポイントを実行しましたが、通貨が e または E に設定されておらず、ユーロのみです!

ばかげたことではないことを願っていますが、Bjarneがこれについて説明していないことに混乱しています:PIはコードに#include iostreamを持っていません。すべて* std_lib_facilities*で処理されるためです。それをXD

#include "std_lib_facilities.h"

using namespace std;

int main()
{
    double dollar = 0;
    char currency = ' ';
    const double yen = 0.010;
    const double euro = 1.31;
    const double pound = 0.65;
    double sum = 0;

    cout << "Please enter amount and Y for yen or E for Euro or P for pound.\n";
    cin >> dollar >> currency;

    switch(currency)
    {
        case 'Y': case'y':
        {
            sum = dollar * yen;
            cout << dollar << " is equal to " << sum << " yen.\n";
            break;
        }
        case 'E': case'e':
        {
            sum = dollar * euro;
            cout << dollar << " is equal to " << sum << " euro.\n";
            break;
        }
        case 'P': case'p':
        {
            sum = dollar * yen;
            cout << dollar << " is equal to " << sum << " pound.\n";
            break;
        }
        default:
            cout << "Wrong values...\n";
            break;
    }
    keep_window_open();
    return 0;
}
4

1 に答える 1

2

dollarは であるためdoubleEまたはは、抽出時にe( のように) 数値の指数の一部として解釈されます。2e-2その後に数字がないため、抽出が完了せずcinfail状態になります。の読み取りはcurrencyスキップされ、 の初期値から変更されることはありません' '。スペースを入力すると、 の抽出はdollarそのスペースで終了し、currency期待どおりに読み取られます。

それを修正するには、いくつかのことを試すことができます。金額と通貨インジケータの間にスペースが必要になる場合があります。文字列として読み込んで、自分で解析しようとすることができます。ユーロには別の記号を選択できます。

いずれにせよ、cin読み取りが完了したら、の状態を確認する必要があります。

于 2013-06-06T03:03:25.140 に答える