【发布时间】:2014-08-30 13:30:50
【问题描述】:
我必须完成这个程序。
我有一个这样的文件
Name iD Num_of_elements elem(1) elem(2), ... , elem(n)
james 1 3 AAA BBB CCC
arthur 2 2 EEE FFF
james 1 1 KKK
irine 3 4 EEE FFF DDD AAA
james 1 1 XXX
我需要创建一个列表,将文件加载到列表中并按如下顺序打印:
james 1 3 AAA BBB CCC
james 1 1 XXX
james 1 1 KKK
arthur 2 2 EEE FFF
irine 3 4 EEE FFF DDD AAA
(必须先打印具有相同 iD 的人,然后再打印其他人)。
我已经在 ANSI C 中创建了部分程序,但我无法按照要求完成“最终功能”。
void printListOrderedByiD(struct list *top) { }
这是我的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define len 35
struct elements
{
char name[len];
};
struct list
{
char name[len];
int id;
int numOfElements;
struct elements *pElements; /* pointer to the struct elements */
struct list *next;
};
FILE *openFile(FILE *fp)
{
fp=fopen("file.txt", "r");
if (fp==NULL)
{
perror("");
exit(1);
}
return (fp);
}
struct list *newNode(FILE *fp)
{
int i=0;
struct list *temp=(struct list *)malloc(sizeof(struct list));
fscanf(fp, "%s\t%d\t%d\t", temp->name, &temp->id, &temp->numOfElements);
temp->pElements=(struct elements *)malloc(temp->numOfElements*sizeof(struct elements));
for (i=0; i<temp->numOfElements; i++)
{
fscanf(fp, "%s\t", temp->pElements[i].name);
}
temp->next=NULL;
return temp;
}
struct list *insertAsLast(struct list *top, FILE *fp) /* this function will insert every node at the end of the list */
{
if (top==NULL)
{
top=newNode(fp);
}
else
{
top->next=insertAsLast(top->next, fp);
}
return top;
}
void printList(struct list *top) /* this procedure will stamp the list as loades from the file */
{
int i=0;
if (top==NULL)
{
printf("//\n");
}
else
{
printf("%s %d %d ", top->name, top->id, top->numOfElements);
for (i=0; i<top->numOfElements; i++)
{
printf("%s ", top->pElements[i].name);
}
printf("\n");
printList(top->next);
}
}
int main()
{
struct list *top=NULL;
char firstLine[200];
FILE *fp=NULL;
fp=openFile(fp);
fgets(firstLine, 200, fp); /* in order to jump the 1st line */
while (!feof(fp))
{
top=insertAsLast(top, fp);
}
fclose (fp);
printList(top);
return 0;
}
谁能帮帮我?
【问题讨论】:
标签: c pointers linked-list ansi