typy wyliczeniowe enum

2013-07-08 21:01
0

Witam. Mam takie pytanie. Skąd program wie że ma wziąć dane zapisane w bloku enum, jeżeli enum dlug występuje tylko raz. Dalej jest przecież deklaracja stringa imie(Bo przez switcha nie ruszy) np.

//biblioteki(dyrektywy):
#include<iostream>//pozwala pisać za pomocą cout<<"";//obsługa strumieni I/O
#include<conio.h>//pozwala wywołać funkcję getch();
#include<math.h>
#include<cstdio>
#include<cstdlib>//pozwala wywołać system("pause");
#include<windows.h>
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#include<string>
#include<cmath>
#include<fstream>
#include<sstream>
#include<locale>
using namespace std;
string PL( const char * text )
{
    string result;
    for(; * text; text++ )
    switch( * text )
    {
    case 'ą': result += static_cast < char >( 0xa5 ); break;
    case 'ć': result += static_cast < char >( 0x86 ); break;
    case 'ę': result += static_cast < char >( 0xa9 ); break;
    case 'ł': result += static_cast < char >( 0x88 ); break;
    case 'ń': result += static_cast < char >( 0xe4 ); break;
    case 'ó': result += static_cast < char >( 0xa2 ); break;
    case 'ś': result += static_cast < char >( 0x98 ); break;
    case 'ż': result += static_cast < char >( 0xbe ); break;
    case 'ź': result += static_cast < char >( 0xab ); break;
    case 'Ą': result += static_cast < char >( 0xa4 ); break;
    case 'Ć': result += static_cast < char >( 0x8f ); break;
    case 'Ę': result += static_cast < char >( 0xa8 ); break;
    case 'Ł': result += static_cast < char >( 0x9d ); break;
    case 'Ń': result += static_cast < char >( 0xe3 ); break;
    case 'Ó': result += static_cast < char >( 0xe0 ); break;
    case 'Ś': result += static_cast < char >( 0x97 ); break;
    case 'Ż': result += static_cast < char >( 0xbd ); break;
    case 'Ź': result += static_cast < char >( 0x8d ); break;
        default: result += * text; break;
    }
    return result;
}
enum dlug{
    Adrian=546,
    Boguslaw,//2
    Cezary,//3
    Dominik,//4           //automatycznie ustala wartosc. wystarczy ustawic wartosc pierwszej zmiennej
    Eustachy,//5
    Ferdynand,//6
    Gustaw,//7
    Irek//8
};
int main(){

    cout<<PL("Wybierz dłużnika:\n");
    cout<<PL("1.Adrian\n2.Bogusław\n3.Cezary\n4.Dominik\n5.Eustachy\n6.Ferdynand\n7.Gustaw\n8.Irek")<<endl;
    string imie;
    cin>>imie;
    if(imie=="Adrian"){
        cout<<PL("Adrian winien jest ")<<Adrian<<PL(" złotych");
    }
    if(imie=="Boguslaw"){
        cout<<PL("Boguslaw winien jest ")<<Boguslaw<<PL(" złotych");
    }
    if(imie=="Cezary"){
        cout<<PL("Cezary winien jest ")<<Cezary<<PL(" złotych");
    }
    if(imie=="Dominik"){
        cout<<PL("Dominik winien jest ")<<Dominik<<PL(" złotych");
    }
    if(imie=="Eustachy"){
        cout<<PL("Eustachy winien jest ")<<Eustachy<<PL(" złotych");
    }
    if(imie=="Ferdynand"){
        cout<<PL("Ferdynand winien jest ")<<Ferdynand<<PL(" złotych");
    }
    if(imie=="Gustaw"){
        cout<<PL("Gustaw winien jest ")<<Gustaw<<PL(" złotych");
    }
    if(imie=="Irek"){
        cout<<PL("Irek winien jest ")<<Irek<<PL(" złotych");
    }

    system("pause");
    return 0;
}

A co by było, gdybym miał załóżmy dwa enumy o dwóch różnych nazwach, a imiona byłyby te same w jednym jak i w drugim enumie. A każdy enum zamierałby inne dane. W jednym np. dług, a w drugim jak długo zalega ze spłatą.

edytowany 2x, ostatnio: adrian.widzew, 2013-07-08 21:03
W enumie pierwszą stałą też nie trzeba ustalać. - _13th_Dragon 2013-07-08 22:55

Pozostało 580 znaków

2013-07-08 22:48
1

A co by było, gdybym miał załóżmy dwa enumy o dwóch różnych nazwach, a imiona byłyby te same w jednym jak i w drugim enumie. A każdy enum zamierałby inne dane
Dlaczego nie spróbujesz?

Pozostało 580 znaków

2013-07-08 22:54
0

Czy musisz takiego brzydkiego switch'a wsadzać?

string PL(const char * text)
  {
   string result(text);
   static string SPL("\xa5\x86\xa9\x88\xe4\xa2\x98\xbe\xab\xa4\x8f\xa8\x9d\xe3\xe0\x97\xbd\x8dąćęłńóśżźĄĆĘŁŃÓŚŻŹ");
   for(string::iterator i=result.begin();i!=result.end();++i)
     {
      size_t p=SPL.find(*i,18);
      if(p!=string::npos) *i=SPL[p-18];
     }
   return result;
  }

Nie wspominając już o tym że pełno jest bibliotek wspierających konwersje.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0