36 online Udvikleren.dk > Forums > Forum >

"C++" Sprøgsmål til enumerator "enum"

Video: Se NoSQL-fanboi få smæk med sarkasme-køllen

Video: Se NoSQL-fanboi få smæk med sarkasme-køllen

Animerede tøjdyr med robotstemmer diskuterer, om /dev/null skalerer og andre vigtige emner i et særdeles saftigt sprog, hvor NoSQL-databasen Mongodb's fans får hug. [Læs mere | 0 kommentarer]
 


"C++" Sprøgsmål til enumerator "enum" Forum  Forum Opret nyt emne  Nyt emne
Hej, jeg sidder her og læser og øver mig med denne bog Beginning C++ Through Game Programming.

Og jeg er på side 93 og er kommet til at jeg skal lave et lille bogstav jagt spil i kommando prompt og det er også fint nok men jeg er stødt på noget jeg ikke helt forstår.

I bogen skriver Michael Dawson "forfatteren af bogen" dette her tip.

Trick: You can list a final enumerator in an enumeration as a convenient way to store the number of elements. Here's an example.
Fold kodeboks ind/udKode 

In the previous code, NUM_DIFF_LEVELS is 3, the exact number of difficulty levels in the enumeration. As a result, the second line of code display the message, "There are 3 difficulty levels".

Det jeg ikke forstår er hvordan den sidste i enum har nummeret på hvor mange der er i den enum, jeg kan ikke se hvordan den finder ud af der er 3.

[Denne post blev opdateret d. 14-02-10 18:02 af Kim]
Det er fordi ligesom med arrays så er den første enumerator 0, den anden 1, den tredje 2 osv. (medmindre du specificerer et nummer). Den sidste vil så altid være det antal af muligheder (undtagen sig selv). Så hvis du har 3 sværhedsgrader: let, mellem og svært, vil det være henholdsvis "nummer" 0, 1 og 2. Hvis du efter dette har en enumerator for antallet af sværhedsgrader vil den have værdien 3, hvilket også er antallet af sværhedsgrader.

Lads os nu sige du har 10 sværhedsgrader. De vil så være 0-9 (forudsat du ikke specificerer et nummer). Hvis du så tilføjer en for antallet vil den få værdien 10, hvilket igen er antallet af elementer.

Hvis N er antallet af elementer.
Hvis S er antallet af elementer + elementet der fortæller hvor mange elementer der er dvs. (N+1)

Lads os sige N=10. Hver af de originale elementer har "værdien" N-1 (fordi der startes ved 0), så her 0-9. Så lægger du en en værdi ind der indeholder antallet af elementer. Dvs. S=11. Dens værdi bliver så S-1=10 som er lig med N.

[Denne post blev opdateret d. 14-02-10 18:49 af Søren Enevoldsen]
Søren, jeg tak for dit nuværende svar men jeg forstår ikke helt endnu.

Jeg forstår det med numrende som jeg også kender fra arrays men det jeg ikke forstår er, er den sidste i enum ALTID et nummer på hvor mange elementer der er ?

Jeg kan godt forstå at du ikke forstår det, men prøv at se om du kan gennemskue følgende:

Fold kodeboks ind/udKode 


Det betyder faktisk det samme som
Fold kodeboks ind/udKode 


Du har tre niveauer, EASY, MEDIUM og HARD. NUM_DIFF_LEVELS har bare fået tildelt nummeret 3 i din enum. Men dette passer jo meget godt med at du har tre niveauer.

Slot - All your base are belong to us
http://www.sigsys.dk
ah sådan!

Ja nu kan jeg se det.


Her sad jeg og læste kapitlet med det trick en tusinde gange og fattede bjælke, jeg troede jo den på en eller anden måde tog og fandt ud af hvor mange andre der var osv osv. men jeg gjorde det jo kun mere svært for mig selv :)

Mange tak for hjælpen til jer begge :)

[Denne post blev opdateret d. 14-02-10 20:29 af Kim]
Men det skal lige siges at det ikke ALTID er sådan. F.eks. hvis du selv specificerer et nummer:
Fold kodeboks ind/udKode 

Så vil NUM_DIFF_LEVELS vist nok være lig med 201. Hvis du ikke skriver noget tal starter den med 0, 1, 2 osv..

Ja det rigtigt, rigtig smart man også selv kan give dem numre :)

Det er ret farligt at stole på at sidste element har antallet af elementer, for sådan behøver det ikke at være...heller ikke selvom man ikke selv har været inde og pille. Compileren skal bare give elementerne forskellige værdier.

Hvad så hvis man angiver første element med værdien 0 så giver den vel resten i rækkefølge ?

Det er ret farligt at stole på at sidste element har antallet af elementer, for sådan behøver det ikke at være...heller ikke selvom man ikke selv har været inde og pille. Compileren skal bare give elementerne forskellige værdier.


C og C++ standarden garanterer at det virker, compileren kan ikke bare vælge tilfældige værdier. Hvis man ikke angiver andet skal den første i enumlisten have værdien 0, den næste 1 osv.

Derfor kan man også bruge værdierne i loops, fra mandag til og med soendag, f.eks.

42657274656C204272616E646572
Det er ret farligt at stole på at sidste element har antallet af elementer, for sådan behøver det ikke at være...heller ikke selvom man ikke selv har været inde og pille. Compileren skal bare give elementerne forskellige værdier.


C og C++ standarden garanterer at det virker, compileren kan ikke bare vælge tilfældige værdier. Hvis man ikke angiver andet skal den første i enumlisten have værdien 0, den næste 1 osv.

Derfor kan man også bruge værdierne i loops, fra mandag til og med soendag, f.eks.


Jeg har arbejdet med en ARM compiler som startede med 1.


3 udviklere følger aktivt med i denne tråd
<<   Side 1 ud af 2   >>









Klik for at logge ind


Teknologier