程序中的while陷入了死循环,我觉得是链表指针的问题,但是我找不出来,求大佬帮助
问题描述:
C++
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
typedef int status;
#define ERROR 0
#define OK 1
#define stu "C:\\Users\\Administrator\\Desktop\\student\\stu.txt"
//structure of student
typedef struct Student
{
char no[8];
char name[20];
int score;
}Student;
//definition of linked list
typedef struct LNode
{
Student data;
struct LNode *next;
}LNode, *LinkList;
//create list (formal)
LNode * CreateList(LinkList &L, int sum)
{
p = new LNode;
while(p != NULL && count < sum)
{
printf("Please enter the Sno:\n");
scanf("%s",&((p->data).no));
printf("Please enter the name:\n");
scanf("%s",&((p->data).name));
printf("Please enter the score:\n");
scanf("%d",&((p->data).score));
p->next = L->next;
L->next = p;
count++;
while(getchar()!= '\n')
continue;
}
}
//sort
status SortElem(LinkList &L)
{
if(L == NULL || L->next == NULL) return ERROR;
struct LNode *pstart;
struct LNode *head;
struct LNode *minNode;
struct LNode *p;
pstart = new LNode;
p = new LNode;
pstart->next = L;
head = pstart;
printf("sno:%s\nname:%s\nscore:%d\n",(L->next->data).no, (L->next->data).name, (L->next->data).score);
while(head->next != NULL)
{
printf("sno:%s\nname:%s\nscore:%d\n",(L->next->data).no, (L->next->data).name, (L->next->data).score);
minNode = head->next, p = head->next->next;
while(p->next != NULL) //这个循环出错了
{
printf("sno:%s\nname:%s\nscore:%d\n",(L->next->data).no, (L->next->data).name, (L->next->data).score);
if((p->data).score < (minNode->data).score)
minNode = p;
p = p->next;
}
swap(minNode->data, head->next->data);
head = head->next;
}
L = pstart->next;
p = L;
while(p != NULL)
{
printf("sno:%s\nname:%s\nscore:%d\n",(p->data).no,(p->data).name,(p->data).score);
p = p->next;
}
delete pstart;
}
答
两处
p = new LNode;
后面加上
p->next = NULL;
pstart = new LNode;
后也加上
pstart->next = NULL;