自学C语言-CPrimerPlusV6学习记录-20211102

自学C语言-CPrimerPlusV6学习记录-20211102,第1张

自学C语言-CPrimerPlusV6学习记录-20211102

开始学习队列ADT,这次弄个明晰的菜单出来。

1.问题(solved):使用switch选择执行,但读取添加、删除、全删除三个选项后就程序错误,也许是相关的三个函数有错误。

定义变量的时候错误,将变量定义成指针:

Student *temp_student=NULL;

Queue *man=NULL;

造成内存无法读取,换成:

Student temp_student={0};

Queue man={0};

程序已经可以运行。现在开始试着发现运行中的具体问题。

2.问题(solved):数据存储错误,最后一项会漏掉,进行删除等 *** 作后甚至会报错。

显示函数:

void ShowQueue(Queue *pqueue)
{
	Queue pscan=*pqueue;
	fputs("*********Database*********n",stdout);
	if(!pscan.nodes)
		fputs("No Data Found!n",stdout);
	else
	{
		printf("(%d)Data Found.n",pscan.nodes);
		while(pscan.front)//!!!原错为(pscan.front->next)
		{
			printf("NO.%d:Name:%s,Score:%hd.n",
        pscan.nodes,pscan.front->student.name,pscan.front->student.score);
			pscan.front=pscan.front->next;		
		}
	}
}

将原错while(pscan.front->next)改为while(pscan.front);

这个问题莫名其妙自己解决了。

3.问题(solved):显示函数的次序数有问题。总是显示最后一项。

后来终于发现:结构定义时,queue结构中的nodes计数标签存储的就是最后一项,因为queue并不是链表项,node才是链表项,所以如果要对每一项进行编码,必须在node结构里添加编码计数标签。

typedef struct student
{
	char name[LEN_NAME];
	short score;
}Student;

typedef struct node
{
	Student student;
	struct node *next;
}Node;

typedef struct queue
{
	Node *front;
	Node *rear;
	int nodes;
}Queue;

4.问题(solved):全部删除函数的显示有错

short DeQueue(Student *pstudent,Queue *pqueue)
{
	if(IsQueueEmpty(pqueue))
		return 0;
	Node *ptemp=pqueue->front;
	*pstudent=ptemp->student;//错误原:pstudent=&(ptemp->student);
	pqueue->front=pqueue->front->next;
	free(ptemp);
	pqueue->nodes--;
	if(!(pqueue->nodes))
		pqueue->rear=NULL;
return 1;}

void EmptyQueue(Student *pstudent,Queue *pqueue)
{
	int i=pqueue->nodes;
	while(DeQueue(pstudent,pqueue))
		printf("Data->name:%s,score:%hd has cleaned.n",
    pstudent->name,pstudent->score);
	printf("Over!%d data has cleaned.n",i);
}

发现:错误原:pstudent=&(ptemp->student);这句代码有问题,改成:*pstudent=ptemp->student;就能顺利显示被删除数据的内容

个人理解:指向Student结构类型的指针pstudent指向ptemp->student的地址,但是ptemp内存被free(ptemp)清理,造成指向错误。

完全代码

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4995043.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存