2013-11-09 43 views
0

這次是關於使用結構作爲參數。在這個任務中,我必須創建一個FIFS隊列系統。靜態人員隊列的大小爲10.這意味着只有10人可以在隊列中。使用結構作爲參數

我也有類型爲static的head,tail和nbr_elem變量。尾部變量用於將人員添加到特定位置。而可變頭的vice_versa。 nbr_elem是隊列中的人數。我認爲你不需要更多的信息來幫助我。現在回答這個問題:

如何在結構中使用一個結構作爲參數?這是我迄今所做的:

static person queue[QUEUE_MAX_SIZE]; 
static int head = 0, tail = 0, nbr_elem = 0; 
struct person 
{ 
    char first_name[7]; 
    char sur_name[10]; 
    char pers_nbr[10]; 

}; 


void person_info(struct person p1){ 


    /*printf("First name: ");*/ 
    scanf("%s", &p1.first_name[7]); 
    /* printf("Last name: ")*/; 
    scanf("%s", &p1.sur_name[10]); 
    /*printf("Id-number: ");*/ 
    scanf("%s", &p1.pers_nbr[10]); 
} 

一切正常,到目前爲止,但現在我必須首先使用的strcpy功能複製INF,然後把它給數組把結構人員P1在隊列人排隊[QUEUE_MAX_SIZE]我猜(?)

void enqueue(person queue[QUEUE_MAX_SIZE]) 
{ 
    queue[person_info(p1.first_name[7])]; 
} 

我甚至不知道這是否是功能排隊的一個良好的開端,所以我在這裏需要一些幫助。我該如何在函數中使用靜態人員隊列[QUEUE_MAX_SIZE]?

我也有一個頭文件queue.h包含typedef人。頭文件然後被調用到queue.c這是這個文件。

+0

您正在更新原始結構的副本。你需要從你的函數返回修改後的結構(或者用[Joachim的答案](http://stackoverflow.com/a/19880113/2455888))。 – haccks

回答

1

隨着結構是按值傳遞的功能

void person_info(struct person p1) 

,這是一份拷貝,並只修改此副本。要通過引用,在C被傳遞的指針進行傳遞,要在功能

void person_info(struct person *p1) 

scanf電話是非常錯誤的方式。它將在結構實例中寫入超出數組。只需使用例如

scanf("%6s", p1.first_name); 

繼續閱讀你的問題,看來你對如何使用數組一些非常基本的誤解,所以我建議你回去再準備一個關於最近的書或教程數組和數組索引的篇章。事實上,考慮到你對數組的基本使用不當,我懷疑你會立即理解諸如指針這樣的概念,所以我建議你去閱讀一些關於該主題的書籍和教程。

+0

是的,我現在意識到scanf是錯誤的,最後不應該有任何[7]。 – Eskipo