【发布时间】:2019-08-07 16:56:04
【问题描述】:
经过几个小时的阅读,我想我可以澄清我的问题了。这是一个与作业相关的问题,但我正在寻求有关概念的帮助;不是我的确切代码的解决方案。包含我的代码用于可视化目的。
我的程序读入的文本文件中有以下数据:
HIS1043.002 MH2.102 MWF 1:00-1:50pm 120 35.00
GEO1013.005 MB1.101 TR 12:30-1:45pm 5 35.00
MAT1214.003 MS1.02.03 TR 2:00-3:15pm 1 35.00
CS1713.002 NPB1.202 MWF 1:00-1:50pm 0 50.00
MAT3013.001 MS1.02.07 TR 2:00-3:15pm 1 35.00
ENG1023.001 MH2.202 MWF 10:00-10:50am 15 35.00
这是我使用的两个 typedef 结构:
// Course Definition
typedef struct
{
StudentNode *pWaitlistHead;
char szCourseId[12];
char szRoom[15];
char szDays[15];
char szTimes[15];
int iAvailSeats;
double dFee;
} Course;
// Node for course list
typedef struct CourseNode {
struct CourseNode* pNext;
Course course;
} CourseNode;
这是从文件中读取数据的函数。在该函数中,我调用了另外两个函数:一个为课程节点分配空间,另一个将数据添加到列表中。
int getCourses(Course courseM[])
{
char szInputBuffer2[100];
int i = 0;
while(fgets(szInputBuffer2, 100, pFileCourses) != NULL)
{
sscanf(szInputBuffer2, "%12s %15s %8s %15s %d %lf",
courseM[i].szCourseId, courseM[i].szRoom,
courseM[i].szDays, courseM[i].szTimes,
&courseM[i].iAvailSeats, &courseM[i].dFee);
}
//allocate space for linked-list
pNew = allocateNodeC(courseM); //???
//add courses to linked list
insertN2CourseList(&pHead, &pNew);
return i;
}
我的问题是关于如何在列表实现中处理课程描述数据。我需要在分配中单独处理每个元素吗?从文件中读取所有数据时会怎样?
//allocate space for CourseNode linked list
CourseNode *allocateNodeC(Course courseM[])
{
CourseNode *pNew = malloc(sizeof(CourseNode));
pNew->pNext = NULL;
pNew->course.szCourseId = courseM[i].szCourseId; //?????
pNew->course.szRoom = courseM[i].szRoom; //?????
pNew->course.szDays = courseM[i].szDays; //?????
pNew->course.szTimes = courseM[i].szTimes; //?????
pNew->course.iAvailSeats = courseM[i].iAvailSeats; //?????
pNew->course.dFee = courseM[i].dFee; //?????
return pNew;
}
//add courses to linked list
CourseNode insertN2CourseList(CourseNode **ppHead, CourseNode *ppNew)
{
CourseNode p*;
if(*ppHead == NULL)
{
*ppHead = pNew;
return;
}
for(p = *ppHead; p->pNext != NULL; p = p->pNext);
}
【问题讨论】:
-
您似乎在问如何实现链表,而不是如何“将数据从数组添加到列表”。列表不是 C 语言中的东西,也不是由标准库提供的,因此如何将项目添加到列表中完全取决于您的列表实现。由于您似乎尚未编写列表实现,因此您可能问错了问题。
-
我正在使用链表并更新现有程序,因此我只包含了我所坚持的特定区域的一部分代码(也是更新的起点)。读入课程数据后,我现在需要将其添加到链表中,但我不太明白它是如何与数组一起工作的。
-
很好的澄清,但现在很明显你的问题过于复杂了。您的问题似乎只是如何复制字符串的问题。在 C 中,字符串和数组不是一等数据类型,不能使用 = 运算符进行赋值。
-
allocateNodeC 应该采用单个 Course 对象指针,而不是整个数组。
标签: c arrays pointers struct linked-list