2017-09-07 1 views
0

Voici le code:C++ enum classe affiche pas correctement

#include "stdafx.h" 
#define _USE_MATH_DEFINES 
#include <cmath> 
#include <iostream> 
#include <iomanip> 


enum Suit : long {Heart, Club, Spade, Diamond}; 
enum class Color : char {Red = '*', Blue, Yellow, Green}; 
int main(int argc, wchar_t* argv[]) 
{ 
    using namespace std; 
    auto suit = Suit::Club; 
    auto color = Color::Yellow; 
    cout << setw(37) << left << "Suit value: " << setw(5) << right << suit << endl; 
    cout << setw(37) << left << "Suit value +10: " << setw(5) << right << suit + 10 << endl; 
    cout << setw(37) << left << "Color value: " << setw(5) << right << static_cast<char>(color) << endl; 
    cout << setw(37) << left << "Color value +10: " << setw(5) << right << static_cast<int>(color) << endl; 

    wchar_t x; 
    wcin >> x; 
    return 0; 
} 

Résultat opérationnel en vs2017:

Suit value:        1 
Suit value +10:       11 
Color value:        , 
Color value +10:      44 

Ainsi, le charbon * a été imprimé comme une virgule, pourquoi?

+2

Non, le rouge aurait affiché '*', les affichages jaunes ',' parce que la table ascii est '* +, -' – Petesh

+1

Ah, mon mauvais. Besoin d'un café maintenant. – qed

Répondre

3

Red est '*', et Yellow est '*' + 2, ce qui correspond à ','.

Plus précisément, 42 est la valeur ASCII pour '*' et 44 est pour ',' et Red et Yellow diffèrent par 2.

0

Ascii Code Table

Comme vous le savez comment le travail enum, variable de enum valeur get +1 de la dernière valeur. pour Ex-

enum { 
     sunday = 0, monday, tueday, ... , saturday 
} 

si vous accès à la valeur de monday il sera 1. comme vous l'avez donné red = '*'. donc pour complier votre enum ressemblera à ceci.

enum { 
     red = '*', 
     blue = '+', 
     yellow = ',' 
} 

maintenant vous savez.