【发布时间】:2015-06-09 18:39:12
【问题描述】:
我正在尝试创建一个链接列表来存储来自文本文件的输入。 我可以获取第一组信息,但是当我获取后续信息时,出现了段错误。
请告诉我我做错了什么。
这是我的全部代码
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int CourseID;
char CourseName[30];
} courseInfo;
struct StudentInfo{
char StudentID[9];
char FirstName[20];
char LastName[25];
int Courses;
courseInfo CourseInfo[10];
struct StudentInfo *next;
};
typedef struct StudentInfo studentInfo;
typedef studentInfo *ListPtr;
studentInfo LoadFile(studentInfo *RootPtr);
void PrintStruct(studentInfo *startPtr);
int main()
{
studentInfo studentList[100];
ListPtr HeadPtr = NULL;
printf("Loading File...\n");
LoadFile(HeadPtr);
printf("Load Success\n");
PrintStruct(studentList);
printf("AfterPrint\n");
return 0;
}
studentInfo LoadFile( studentInfo *RootPtr)
{
FILE * ptrFile;
ListPtr NodePtr = malloc(sizeof (studentInfo));
ListPtr curr;
int counter, i=0;
ptrFile = fopen("studentInfo.txt", "r");
if( ptrFile == NULL)
printf("Open Unsuccessful\n");
fscanf(ptrFile,"%s", NodePtr->StudentID);
printf("%s\n", NodePtr->StudentID);
fscanf(ptrFile,"%s", NodePtr->FirstName);
printf("%s\n", NodePtr->FirstName);
fscanf(ptrFile,"%s", NodePtr->LastName);
printf("%s\n", NodePtr->LastName);
fscanf(ptrFile,"%d", &(NodePtr->Courses));
printf("%d\n", NodePtr->Courses);
for(counter = 0; counter <= NodePtr->Courses; counter++)
{
fscanf(ptrFile,"%s", NodePtr->CourseInfo[counter].CourseName);
printf("%s ", NodePtr->CourseInfo[counter].CourseName);
fscanf(ptrFile,"%d", &(NodePtr->CourseInfo[counter].CourseID));
printf("%d\n", NodePtr->CourseInfo[counter].CourseID);
}
curr = RootPtr;
NodePtr->next = NULL;
RootPtr = NodePtr;
NodePtr = NodePtr -> next;
while( strcmp("***", NodePtr->StudentID) !=0 )
{
fscanf(ptrFile,"%s", NodePtr->StudentID);
printf("%s\n", NodePtr->StudentID);
fscanf(ptrFile,"%s", NodePtr->FirstName);
printf("%s\n", NodePtr->FirstName);
fscanf(ptrFile,"%s", NodePtr->LastName);
printf("%s\n", NodePtr->LastName);
fscanf(ptrFile,"%d", &(NodePtr->Courses));
printf("%d\n", NodePtr->Courses);
for(counter = 0; counter <= NodePtr->Courses; counter++)
{
fscanf(ptrFile,"%s", NodePtr->CourseInfo[counter].CourseName);
printf("%s ", NodePtr->CourseInfo[counter].CourseName);
fscanf(ptrFile,"%d",&(NodePtr->CourseInfo[counter].CourseID));
printf("%d\n", NodePtr->CourseInfo[counter].CourseID);
}
NodePtr = NodePtr->next;
}
fclose(ptrFile);
return *NodePtr;
}
void PrintStruct(studentInfo *startPtr)
{
int i;
ListPtr begin;
printf("In print\n");
for( begin = startPtr; begin->next != NULL; begin=begin->next)
{
printf("%s\n", begin->StudentID);
printf("%s\n", begin->FirstName);
printf("%s\n", begin->LastName);
printf("%d\n", begin->Courses);
for(i = 0; i <= begin->Courses; i++)
{
printf("%s", begin->CourseInfo[i].CourseName);
printf("%d\n", begin->CourseInfo[i].CourseID);
}
}
return;
}
`
我的文本文件是: 111111111 丽莎 搬运工 3 ENEE 114 CMSC 412 恩梅 515 333333333 亚历克斯 辛普森 1 CMSC 412
并且最多只能打印“333333333” 后跟一个“0”,然后是一个段错误。
【问题讨论】:
-
无关:在
printf("Open Unsuccessful\n");之后你应该退出。
标签: c file linked-list scanf