typy wyliczeniowe enum

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ą.

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?

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.

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