[英]Print Linked lists with Structs
我得到了一項家庭作業,需要填寫所有功能。 現在,當我進入第三張打印紙時,我得到一個錯誤,即ptr(variable)無法訪問數據(在他可以之前?)
我嘗試在將值發送到函數之前打印這些值,看看它得到了什么,並且得到了正確的名稱,但是函數中的內容有些混亂
結構:
typedef struct {
char name[32];
char surname[32];
char id[32];
char position[64];
int salary;
} EmployeeData;
typedef struct tEmployeeNode {
EmployeeData data;
struct tEmployeeNode *next;
} EmployeeNode;
數組與所有數據:
EmployeeData data[4] = {
{ "John","Silver","200011123", "Mutineer", 3000 },
{ "David","Livesey","122233345", "Doctor", 7000 },
{ "Jim","Hawkins","201072716", "Cabin Boy", 1000 },
{ "John","Trelawney","122233444", "Squire", 200 } };
創建節點
EmployeeNode *createEmployeeNode(EmployeeData data) {
EmployeeNode *temp = (EmployeeNode *)malloc(sizeof(EmployeeData));
temp->data = data;
temp->next = NULL;
return temp;
}
創建鏈接列表功能
EmployeeNode *createListOfEmployees(EmployeeData *arr, int size) {
int i;
EmployeeNode *head, *ptr;
EmployeeNode *temp = (EmployeeNode *)malloc(sizeof(EmployeeData));
if (temp == NULL) {
printf("Error\n");
exit(1);
}
temp->data = arr[0];
temp->next = NULL;
head = temp;
ptr = head;
for (i =1; i < size; i++) {
temp = createEmployeeNode(arr[i]);
if (ptr->next != NULL) {
ptr = ptr->next;
}
else {
ptr->next = temp;
temp->next = NULL;
}
}
return head;
}
主要的printf功能:
void printListOfEmployees(EmployeeNode *head) {
EmployeeNode *ptr = head;
while (ptr != NULL) {
printEmployee(ptr->data);
ptr = ptr->next;
}
}
內部printf函數:
void printEmployee(EmployeeData e) {
printf("%s %s %s %s %d\n", e.name, e.surname, e.id, e.position, e.salary);
}
這是我實際上在調用函數的地方
EmployeeNode *head = createListOfEmployees(data, 4);
printf("Employees of the Espaniola Team:\n\n");
printListOfEmployees(head);
結果應為: 所有數組節點都應在Struct中,並帶有指向下一個節點的鏈接列表,並按正確的順序打印所有內容。 主要是我的問題是我輸了“吉姆·霍金斯”,無法弄清楚原因。
謝謝您的幫助!
正確的createListOfEmployees
函數主體(不為簡潔起見進行錯誤檢查):
EmployeeNode *head= NULL;
EmployeeNode *previousnode = NULL;
for (int i = 0; i < size; i++) {
EmployeeNode *newnode = createEmployeeNode(arr[i]);
if (previousnode != NULL)
previousnode->next = newnode;
else
head = newnode;
previousnode = newnode;
}
return head;
把事情簡單化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.