Wie interpretiert c ++ 6e (oder eine beliebige Zahl mit e) als Eingabe?

Sep 17 2020

Wenn Sie diesen Code ausführen und 6e oder eine andere Ziffer mit e eingeben, erkennt das Programm ihn nicht und landet im Status else. Was mache ich hier falsch?

#include "../std_lib_facilities.h"

int main() {
    cout << "Please enter amount of money followed by the currency name:" 
        + "y for yen, p for pound or e for euro, like 3.40e. \n"
        << "This app will convert it to dollars. \n";
    double amount;
    char currency = ' ';
    double dollars;
    cin >> amount >> currency;

    cout<<"amount:  "<< amount <<"\n";
    cout<<"currency :" << currency<<"\n";

    if (currency == 'y'){
        cout <<amount<<"Yuan = "<< amount * 0.15<<" dollars";
    }
    else if (currency == 'e') {
        cout << amount << "Euro = " << amount * 1.18 << " dollars";
    }
    else if (currency == 'p') {
        cout << amount << "Pounds = " << amount * 1.29<< " dollars";
    }
    else {
        dollars = 0;
        cout << "Unknown currency\n";
    }
}

Antworten

3 rustyx Sep 17 2020 at 17:02

operator >> Liest Elemente, die durch Leerzeichen getrennt sind (oder bis zu einem nicht analysierbaren Zeichen).

6ekann nicht als a analysiert werden double(ist aber eein gültiges Zeichen für die wissenschaftliche Notation, daher wird es verbraucht) und cingeht in einen fehlgeschlagenen Zustand über, und jeder nachfolgende >>Aufruf schlägt fehl.

Damit dies cin >> amount >> currency;funktioniert, sollte die Eingabe wie 6 e(oder 6e0e) aussehen .

Wenn Sie 6eauch als Eingabe arbeiten möchten , müssen Sie sie als Zeichenfolge lesen (oder die gesamte Zeile mit lesen getline) und selbst analysieren (z. B. extrahieren und das Suffixzeichen, dann die verbleibenden Ziffern als a analysieren double).

Siehe auch diese ähnliche Frage: Lesen Sie float aus dem Eingabestream ohne das „E“ .