gpt4 book ai didi

c - C 中的链表

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:08 25 4
gpt4 key购买 nike

我有一个程序(我正在尝试解决的示例的一部分),它从文本文件 (bus.txt) 中读取一个值,然后针对这些座位数初始化链表结构的值。所有这些都是在函数内部完成的,我希望链表在函数外部可用。然后我想打印出结果,但似乎无法找到解决方案。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int i, j, numberofseats, temp;
char platenr[8], selection;
char firstname[20], lastname[20];
char phone[11];
char* p;

typedef struct psg
{
char fullname[40];
unsigned short phonenr[10];
unsigned int seatnr;
struct psg* next;
} PASSENGERS;


void readfile(char* platenr, int* seatnr, PASSENGERS* passenger, PASSENGERS* tmp, PASSENGERS* start)
{
char buff[60];
FILE* businfo;
businfo = fopen ("bus.txt", "r");

if (businfo == NULL)
{
printf("Error Opening File, check if file bus.txt is present");
exit(1);
}
else
{
fscanf(businfo, "%s %d", platenr, seatnr);
printf("Bus Licence plate Nr is: %s, and Number of Seats is: %d", platenr, *seatnr);

for (i = 0; i < numberofseats; i++)
{
passenger = (PASSENGERS*) malloc (sizeof(PASSENGERS));
if (passenger == NULL)
{
puts("Unable to allocate memory");
exit(1);
}

passenger->next = NULL;
strcpy (passenger->fullname, "A");
passenger->seatnr = i + 1;

for (j = 0; j < 10; j++)
{
passenger->phonenr[j] = 0;
}

if (start == NULL)
{
start = passenger;
}
else
{
tmp = start;

while (tmp->next != NULL)
{
tmp = tmp->next;
}

tmp->next = passenger;
}
}
}
}


int main()
{
PASSENGERS* passenger, *tmp, *start = NULL;
readfile(platenr, &numberofseats, passenger, tmp, start);

PASSENGERS* current = passenger;

while (current != NULL)
{
printf("%s", current->fullname);
printf("\n");
current = current->next;
}
}

最佳答案

有 3 种方法(我能想到)获取 readfile 和 main 之间的列表:

  1. 使用全局变量(在这种情况下我不会使用它)

您可以在此处阅读有关全局变量的信息 https://www.tutorialspoint.com/cprogramming/c_scope_rules.htm在这里你可以找到关于是否应该尽量减少全局变量使用的讨论: Why are global variables bad, in a single threaded, non-os, embedded application

  1. 发送要更新的内存地址 - 如果我必须从函数返回多个参数,我会使用它。

    void readfile(char* platenr, int* seatnr, PASSENGERS* passenger, PASSENGERS* tmp, PASSENGERS* start)

并在函数中更改 passenger 的值(例如)

*passenger  = (PASSENGERS*) malloc (sizeof(PASSENGERS));
*passenger->next = NULL;
strcpy (*passenger->fullname, "A");
*passenger->seatnr = i + 1;

只需确保在尝试取消引用 passenger 之前验证 passenger 不为空。 (您还应该在尝试 *passenger->fullname 之前检查 malloc 是否成功)。

  1. 使用返回值——这是我在这里使用的。我的函数声明是

    PASSENGERS* 读取文件(char* platenr, int seatnr)

然后我会返回开始

return start;

从 main 调用函数将是

PASSENGERS* current = readfile(platenr, numberofseats);

我认为这种解决方案更易于阅读。

关于c - C 中的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41236067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com