Kombinált felsorolás C-ben?
Sziasztok!
Szóval az lenne a problémám, hogy egy struktúrát kell létrehozni,mely nevet, árat és típust tárol, ez eddig meg is van. De hogy tudnék 1 névhez több típust is csatolni, azaz egy adott eleme a strúktúrának hogy lehet több típusú?
Van erre valami megoldás?
Nincs. Egy adott nevü változóhoz egy típus tartozhat.
Pontosan mihez kellene több típus? A név *char, az ár int, a típus pedig enum (vagy int).
Hát például, hogy meg lennének adva előre a típusok pl. akció,vígjáték,kalandfilm,dráma
És 1 filmhez több típus is tartozna
Enum esetén ha jól tudom 1 névhez csak 1 típus tartozhat, legalábbis ezt olvastam róla.
Ne haragudj, máris bemásolom.
Hozzon létre egy adatszerkezetet,mely filmek jellemzőit tárolja:név,ár,típus. A film típusa felsorolás, egy film lehet több típusú(kombinált). Töltse fel előre 5 film adatát majd kérje be, milyen típusú filmek érdeklik(több is lehet) és írassuk ki ezek nevét és árát.
Ez lenne az.
Enum kell ide.
Rövid enum tutorial:
A lényege az, hogy bizonyos számokhoz azonosítót rendelsz, például:
enum allat { kutya = 0, macska = 1 };
Ez azért lesz jó, mert beszédes nevet adsz egy számnak, ami által a kódod könnyebben olvasható lesz. Működése:
enum allat valami_allat = kutya;
Mint látható, a változó típusa "enum allat", a változó neve "valami_allat", és értéke az "allat" enumból jöhet, jelen esetben "kutya".
Vagy akár el is hagyhatod a számot az azonosító után:
enum allat { kutya, macska }
Ekkor a kutya 0 lesz, a macska pedig 1. Ezt lehet bonyolítani:
enum allat { kutya, macska = 3, elefant }
Ekkor a kutya 0, macska 3, az elefant 4 lesz.
A trükk az lesz, hogy az enum értékeit lehet ún. flag-ekre is használni. Ehhez az kell, hogy az enum-ban lévő azonosítók értékei 1-től kezdve kettő hatványai legyenek:
enum file_attribute { readable = 1, writable = 2, archivable = 4, hidden = 8, locked = 16 }
A logikai VAGY ( A | B ) művelet így néz ki:
- ha A=0 és B=0, akkor az eredmény 0
- ha A=0 és B=1, akkor az eredmény 1
- ha A=1 és B=0, akkor az eredmény 1
- ha A=1 és B=1, akkor az eredmény 1
Ha azt akarom leírni, hogy van egy olvasható és írható fájlom, ami nem archiválható, nem rejtett és nem zárolt, az úgy néz ki, hogy:
enum file_attribute currentfile = readable | writable;
Ebből az a szám lesz, hogy:
0000 0011, azaz 3
A logikai ÉS ( A & B ) művelet pedig így néz ki:
- ha A=0 és B=0, akkor az eredmény 0
- ha A=0 és B=1, akkor az eredmény 0
- ha A=1 és B=0, akkor az eredmény 0
- ha A=1 és B=1, akkor az eredmény 1
Azaz, ha arra vagyok kíváncsi, hogy a currentfile írható-e, akkor a logikai ÉS műveletét kell használnom.
if ((currentfile & writable) == writable) {
.. //A fájl írható
}
Mivel a writable értéke 0000 0010, és a currentfile 0000 0011, ezért
0000 0011
0000 0010
---
0000 0010 az eredmény, azaz a writable értéke.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!