[C++] i wypisywanie enum przez pętle


(Ryś) #1

Witam! Jak mogę zrobić w C++, gdy mam np. takie enum

enum kolory { Zielony = 2; Czerwony = 3; Niebieski =5 };

że wypisuje mi na wyjście jakie liczby są w danym enum, najlepiej za pomocą pętli for


(Martini M) #2

Witam,

W prostej pętli zwykłego enum'a raczej się nie da wypisać. Enum nie przedstawia się i nie podaje swojej ilości (ilości elementów) ani nie jest w żaden sposób zaindeksowany.

Także na Twoje pytanie ja bym odpowiedział, że się nie da. Trzeba użyć bardziej zaawansowanych struktur np. wektora, albo mapy. Ale to chyba byłby przerost formy nad potrzebami (oczywiście w tej chwili nie znam Twoich potrzeb i wymagań co do programu).

Powodzenia


(Sylwiagrudowska) #3

Witam,

takie programy mają raczej na celu oswojenie z językiem niż naukę pisania funkcjonalnych aplikacji, więc rozwiązanie będzie proste, ale i z przerostem formy nad treścią :slight_smile:

Jak wiadomo, z reguły enuma, (wyliczeniowego typu danych), jeśli się już używa to raczej wraz z instrukcją sterującą switch.

W zadaniu masz powiedziane, że musi pojawić się też pętla for, więc powinno wyglądać to tak:

#include 

#include 


using namespace std;


enum Colors {

	white, orange, red, blue, green, black

};


int main() {


	for (int i = 0;; i++) {               

		switch (i) {

		case (white): {

			cout << white << endl;

			break;

		}

		case (orange): {

			cout << orange << endl;

			break;

		}

		case (red): {

			cout << red << endl;

			break;

		}

		case (blue): {

			cout << blue << endl;

			break;

		}

		case (green): {

			cout << green << endl;

			break;

		}

		case (black): {

			cout << black << endl;

			break;

		}

		default:

			exit(EXIT_SUCCESS);

		}

	}

}

Jeśli chodzi o przypadek,

enum Colors {

	zielony = 2, czerwony = 3, niebieski = 5

};

gdzie lista elementów ma przypisane konkretne wartości sprawa wygląda trochę inaczej. Enum przyjmuje tylko wartości nieujemne, czyli od zera do zakresu inta. Załóżmy, że nie znamy ilości elementów oraz przypisanych im wartości, po prostu chcemy wszystko wypisać.

int main() {


	unsigned int scope = (unsigned int) pow(2, sizeof(int) * 8); //zasięg unsigned int


	for (unsigned int i = 0; i <= scope; i++) {

		switch (i) {

		case (zielony): {

			cout << zielony << endl;

			break;

		}

		case (czerwony): {

			cout << czerwony << endl;

			break;

		}

		case (niebieski): {

			cout << niebieski << endl;

			break;

		}

		}

	}

}

Program oczywiście nie ma większego sensu, ale na początek nauki wystarczy :slight_smile:

Pozdrawiam,

S.


([alex]) #4

Sylwia85 , to co próbujesz tu wcisnąć nie ma żadnego sensu.

np:

for(int i=0;;i++) { switch(i) { ... [/code]

można użyć:

[code=php]for(Colors c=white;c=black;++c) coutcendl; 

... o wiele krótsze i znacznie czytelniejsze.