2017-08-24 8 views
0

J'utilise actuellement des instructions switch avec C++, j'ai travaillé sur quelques exemples et j'ai utilisé un exemple indépendant pour terminer. L'exemple que j'ai choisi était un convertisseur de devises d'eur à gbp. Dans tous les cas, mon code est revenu à la valeur par défaut comme si la mauvaise unité avait été entrée. Ceci est arrivé jusqu'à ce que je change mon entrée du symbole '€' ou '£' en 'E' ou 'P'. J'aimerais savoir où je me suis trompé. un exemple de mon code est ci-dessous.Instruction et symboles du commutateur C++

// Currency: Convert GBP to EUR or Vice Versa 

int main(){ 

    double gbp_to_eur = 1.09; 
    double eur_to_gbp = 0.92; 
    char unit = '£'; 
    double amount_to_convert = 0; 
    int AnyKey = 0; 

    cout << "Please enter the the unit you'd like to convert \n"; 

    cin >> unit; 

    cout << "\n \n Now please enter the amount you'd like to convert. \n"; 

    cin >> amount_to_convert; 

    switch (unit) { 
    case 'P': 
     cout << "Your " << unit << amount_to_convert << " is worth €" << amount_to_convert * gbp_to_eur << '.\n'; 
     break; 
    case 'E': 
     cout << "Your " << unit << amount_to_convert << " is worth €" << amount_to_convert * eur_to_gbp << '.\n'; 
     break; 

    default: cout << "The compiler isn't programmed for this unit of currency. \n"; 
     break; 
    } 


    cin >> AnyKey; 
} 
+3

€ et £ sont des caractères multi-octets probables dans votre région, ce qui est probablement UTF-8. En tant que tel, vous ne pouvez pas utiliser un seul 'char' pour les représenter. –

+1

Vous devriez ouvrir une montre dans votre débogueur et voir à quoi ressemble réellement l'unité dans votre mémoire. Vous pourriez être surpris. –

+1

S'il vous plaît modifier votre question pour contenir [mcve] – Slava

Répondre

0

£ est un symbole unicode, et donc ne rentre pas dans un 8 bits char. Votre compilateur a donné un avertissement comme warning: multi-character character constant pour la ligne en question.

Vous devriez être en mesure de résoudre ce problème avec:

#include <cwchar> 

... 

wchar_t x = u'£'; 
+1

char 8 bits, pas byte :) –

+0

@MichaelDorgan Haha, merci. – 0x5453