You are not logged in.

  • Login

1

Friday, March 23rd 2007, 7:05pm

Zugriff auf enum-Variablen

Ich schreibe ein Programm, welches dezimalzahlen in römische umwandelt.
Habe aber Probleme mit dem Enum-Datentyp.
Und zwar möchte ich der reihe nach die Werte der enums von der dezimalzahl abziehen, was kein Problem darstellt.
Jedoch müssen ja dann auch die zugehörigen Römischen Werte ausgegeben werden (also die "Namen" der enum-Werte).
Gibt es eine Möglichkeit an die Bezeichnungen der Enums dranzukommen und diese auszugeben?

Hier der zugehörige code bis jetzt:

C Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
#include<stdlib.h>
 
enum rzahl {M=1000,CM=900,D=500,CD=400,C=100,XC=900,L=50,XL=40,X=10,IX=9,V=5,IV=4,I=1};
enum rzahl values[] = {M,CM,D,CD,C,XC,L,XL,X,IX,V,IV,I};
 
int main(int argc, char *argv[]){
	enum rzahl z;
	int eingabe;
 
	if(argc > 1)
		eingabe = atoi(argv[1]);
 
	int i;
	for(i = 0 ; i < sizeof(values)/sizeof(enum rzahl) ; i++){
		z = values[i];
		printf("%d\n",values[i]);
	}
 
	return 0;
}


Der code gibt in dieser Form die Zahlenwerte der enums (1000, 900, ...) aus, ich möchte jedoch auch an die Bezeichnung (M, CM, ...) rankommen...

2

Saturday, March 24th 2007, 2:35pm

Hi,
Ich glaube nicht, dass das möglich ist.

ENUMs dienen nur der besseren Lesbarkeit im Code und man kann damit nicht die Funktionalität eines assoziativen Arrays (wie z.B. eine Hashmap) nachbilden.

Dem Präprozessor sind sie auch sehr ähnlich
und bei #DEFINE XX 1 kann man auch nicht von der 1 auf das XX schließen.

3

Saturday, March 24th 2007, 3:22pm

THX

Ja, dachte ich mir.
Habe es wieder mit mehreren Array gelöst, was den enum eigetlich überflüssig macht.
In c# ist es wohl möglich, aber in C nicht. Hier der Code:

C Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<stdio.h>
#include<stdlib.h>
 
enum rzahl {M=1000,CM=900,D=500,CD=400,C=100,XC=90,L=50,XL=40,X=10,IX=9,V=5,IV=4,I=1};
enum rzahl values[] = {M,CM,D,CD,C,XC,L,XL,X,IX,V,IV,I};
char* strings[] = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
 
int main(int argc, char *argv[]){
	int eingabe = 0;
 
	if(argc > 1)
		eingabe = atoi(argv[1]);
 
	int i;
	for(i = 0 ; i < sizeof(values)/sizeof(enum rzahl) ; i++){
		while( eingabe >= values[i] ){
			eingabe -= values[i];
			printf("%s",strings[i]);
		}
	}
 
	if(eingabe == 0)
		printf("\nZahl umgewandelt!");
 
	return 0;
}

Similar threads

Social bookmarks