2015-11-02 69 views
1

我在結構中使用了一個聯合類型來定義這個人是學生還是職員。當我試圖輸出struct數組中的信息時,我發現很難找出這個人是什麼類型的人,而不是輸出更多的信息。不要告訴我停止使用工會,對不起,我被要求這樣做。 赫斯是我的簡單的數據結構:如何確定輸出時使用哪種類型的聯合?

typedef union student_or_staff{ 
    char *program_name; 
    char *room_num; 
}student_or_staff; 

typedef struct people{ 
    char *names; 
    int age; 
    student_or_staff s_or_s; 
}people[7]; 
+2

這不是'硬',這是不可能的。爲'student_or_staff'添加一個標誌來指示什麼是什麼。 – usr2564301

+0

你不能做這種開箱即用的東西。 – Linus

+0

如果你被告知要這樣做,而這是一個練習,我會很好奇,看看有什麼精確的指示 – Lovy

回答

3

這是不可能做到這一點在C,但作爲一種解決方法,你可以這樣

enum { student_type, staff_type } PEOPLE_TYPE; 
typedef union student_or_staff{ 
char *program_name; 
char *room_num; 
}student_or_staff; 

typedef struct people{ 
char *names; 
int age; 
student_or_staff s_or_s; 
PEOPLE_TYPE people_type; 
}people[7]; 

然後你只需設置沿着你的工會添加類型與你的聯合,當你分配你的結構。

+0

---------------------------- thanks -------------------- ------------- – NUO

4

要知道存儲在union中的內容的唯一方法是將此信息包含在其他某個地方。

還有當你處理的union秒的陣列中發生兩種常見的情況(或持有structunion):

  • 所有union S IN數組持有相同類型或
  • 每個union可以保持其自己的類型。

當陣列中的所有union都保持相同類型時,指示保持的類型爲union的單個變量就足夠了。

當每個union可以保持不同類型時,常用的方法是將其包裝在struct中,並添加一個標誌,指示設置union的方式。使用你的例子,該標誌應該被添加到struct people,像這樣:

enum student_staff_flag { 
    student_flag 
, staff_flag 
}; 
typedef struct people{ 
    char *names; 
    int age; 
    enum student_staff_flag s_or_s_flag; 
    student_or_staff s_or_s; 
}people[7]; 
+0

---------------------------- thanks ------- -------------------------- – NUO

相關問題