2016-01-15 3 views
0

Я добавил комментарии к коду, у меня есть проблемы с компилятором? Я не могу понять это, я пробовал искать Google и книгу, но я не могу понять, почему первая половина кода принимает только вход с пробелом между числом и единицей, а второй код принимает число и единицу вместе.2 идентичных кода, получить ошибку при одном

Я использую блоки кода. До сих пор я пытался закрыть его и снова открыть.

int main(){ 

    constexpr double dollar_to_euro = 0.91; 
    constexpr double dollar_to_yen = 117.07; 
    constexpr double dollar_to_pounds = 0.70; 
    double sum = 1; 

    char curr = '\0'; // tried replacing '\0' with '0' and ' ' 

    cout << "Please enter sum, followed by currency for conversion.\n" 
     << "U for dollar, E for euro, Y for yen and P for pounds.\n"; 

    cin >> sum >> curr; // This is my issue, it does not want to accept "sumcurr" together, it only accepts it if theres space in between 
         // yet on the second code for inches or centimeters it does accept them being together. Look down. 
         // For example entering "5 E" works, yet "5E" does not work. 
    if(curr=='E') 
     cout << "The amount " << sum << " euro is " << sum/dollar_to_euro << " dollars\n"; 

    else 
     cout << "GOD DAMMIT !!!!\n"; 


    constexpr double cm_per_inch = 2.54; 

    double len = 1; 

    char unit = '\0'; 
    cout << "Please enter length followed by unit.\n"; 

    cin >> len >> unit; // Over here it works, this is an example from a book. Entering "5i" works. 

    if(unit=='i') 
     cout << len << " in == " << cm_per_inch*len << "cm.\n"; 
    else 
     cout << "Wrong input !\n"; 
} 
+0

ли ввод «5E» за единицу работы? –

+1

См. Части, касающиеся дополнительных «e» или «E»: http://en.cppreference.com/w/cpp/language/floating_literal –

+0

5E не работает, работает только 5 E. Но второй код 5i работает. Для меня они идентичны, я не могу понять, почему один работает, а другой нет. – Rotsin

ответ

7

Проблема здесь состоит в том, что E/e действует в число с плавающей точкой, но 5E/5e не является допустимым числом с плавающей точкой, как вам нужно значение после E/e. Поэтому, когда вы вводите 5e, вход для sum терпит неудачу из-за недействительного синтаксиса, где будет работать 5e0. Если вы используете что-либо, кроме E/e, то оно будет работать как ваш второй пример.

Для получения более подробной информации о формате чисел с плавающей точкой см: Cppreference floating point literal