雀食喵 2021-05-03 22:55 采纳率: 0%
浏览 21

程序老是执行不了,这个应该怎么解决,有没有大佬帮忙看一下的?

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct Stu
{
	char id[10];
	char name[20];
	char bj[10];
	int sx,yy,jsj;
	struct Stu * st;	
}Stu;
Stu * head = NULL;
Stu * tail = NULL;

void help()
{
	printf("---------------主菜单-------------\n");
	printf("1.录入学生信息      2.查询学生信息\n");
	printf("3.学生成绩排名      4.修改学生信息\n");
	printf("5.删除学生信息      6.打印学生信息\n");	
	printf("-----------0. 退出系统------------\n");	
	return;
}

void input()
{
	int i,n;
	printf("请输入录入学生的人数:\n");
	while (scanf("%d", &n) != 1)  
	{
		printf("输入有误!请重新输入:\n");
		fflush(stdin);
	}
	Stu * temp = (Stu *)malloc(sizeof(Stu));
	for(i=0;i<n;++i)
	{
		printf("输入第%d个学生学号:",i+1);
		scanf("%s",temp->id);
		printf("输入第%d个学生姓名:",i+1);
		scanf("%s",temp->name);
		printf("输入第%d个学生班级:",i+1);
		scanf("%s",temp->bj);
		printf("输入该学生三门课成绩:\n");
		printf("数学:");
		scanf("%d",&temp->sx);
		printf("英语:");
		scanf("%d",&temp->yy);
		printf("计算机:");
		scanf("%d",&temp->jsj);
		temp->st = NULL;
			if (head == NULL)
			{
				head = temp;
				tail = temp;
			}
			else 
			{
				tail->st = temp;
				tail = temp;
			}
	}	
	return;
}

Stu * chaxun()
{
	char str[20];
	printf("输入要查找的学生学号或姓名\n按“#”退出\n");
	scanf("%s",str);
	if(str[20]=='#')	return NULL;
	Stu * temp = head;
	if(head==NULL||temp==NULL)
	{ 
		printf("未查找到相关信息!\n");
		return NULL; 
	}
	else
	{
		while (temp)
		{
			if (!strcmp(temp->id, str) || !strcmp(temp->name, str))
			break;			   
			temp = temp->st;
		}
		printf("查找学生信息如下:\n");
		printf("学号:%s,姓名:%s,班级:%s\n",temp->id,temp->name,temp->bj);
		printf("数学成绩:%d,英语成绩:%d,计算机成绩:%d\n",temp->sx,temp->yy,temp->jsj);
	}
	return temp;
}

void paiming(Stu **s)
{
	Stu *p,*q,*t,*r;
	q=(*s)->st;
	p=q->st;
	while(p!=NULL) 
	{
		if(p->jsj>=q->jsj) 
		{ 
			p=p->st;
			q=q->st;
		} 
		else 
		{
			t=(*s)->st;
			r=*s;
			while((p->jsj)>(t->jsj)) 
			{
				r=t;
				t=t->st;
			}
			q->st=p->st;
			p->st=t;
			r->st=p;
			p=q->st;
		}
	}
		return;
}

void xiugai()
{
	char n;
	Stu * temp = chaxun();
	if(temp==NULL)
	printf("无可修改内容\n");
	else
	{
		int num;
		Repeat:
		printf("输入需要修改的内容\n");
		printf("1.学号--2.姓名--3班级\n");
		printf("4.数学成绩--5英语成绩--6计算机成绩\n");
		while 
			(scanf("%d", &num) != 1 || num < 0 || num > 6 )
		{
			printf("您的输入不正确,请重新输入:\n");
				fflush(stdin);
		}
			switch (num)
		{
		 	 case 1:
		 	 	printf("请输入修改的学号\n");
		 	 	scanf("%s",temp->id);
				break;
		 	 case 2:
		 		printf("请输入修改的姓名\n");
		 	 	scanf("%s,",temp->name);
				break;
			 case 3:
		 	 	printf("请输入修改的班级\n");
		 	 	scanf("%s",temp->bj);
				break;
		 	 case 4:
		 		printf("请输入修改的数学成绩\n");
		 	 	scanf("%d",&temp->sx);
				break;
		 	 case 5:
		 	 	printf("请输入修改的英语成绩\n");
		 	 	scanf("%d",&temp->yy);
				break;
		 	 case 6:
		 	 	printf("请输入修改的计算机成绩\n");
		 	 	scanf("%d",&temp->jsj);
				break;
		}
		printf("信息更改后如下:\n");
		printf("学号:%s,姓名:%s,班级:%d\n",temp->id,temp->name,temp->bj);
		printf("数学成绩:%d,英语成绩:%d,计算机成绩:%d\n",temp->sx,temp->yy,temp->jsj);
		printf("是否确认无误?(1or0)\n");
		scanf("%c", &n);
		if (n != '1') 
		goto Repeat;
		printf("您已确认,更改完成!\n");
	}
		return;
}

void shanchu()
{
	Stu * temp=chaxun();
	if(head==NULL||temp==NULL)
	{
		printf("无可删除内容\n");
	}
	else if (head == tail)
	{
		free(head);
		head = NULL;
		tail = NULL;
		printf("删除成功!\n");
	}	
	else if (temp == head)
	{
		head = head->st;
		free(temp);
		printf("删除成功!\n ");
	}	
	else if(temp==tail)
	{
		Stu * pt=head;
		while (pt->st->st)
			pt=pt->st;
	    free(tail);
		tail = pt;
		tail -> st = NULL;
		printf("删除成功!\n ");
	}
   return;
}

void print()
{
	Stu * phead=head;
	if(phead==NULL)
	printf("暂无学生信息!\n");
	while (phead)
	{
		printf("学号:%s,姓名:%s,班级:%d\n", phead->id, phead->name, phead->bj);
		printf("数学成绩:%d,英语成绩:%d,计算机成绩:%d\n",phead->sx,phead->yy,phead->jsj);
		phead = phead -> st;
	}
	return;
}

int main(void)
{
	int num; char ch;
	do
	{ 
		help();
		printf("请选择一个操作:\n");
		while 
			(scanf("%d", &num) != 1 || num < 0 || num > 6 )
		{
			printf("您的输入不正确,请重新输入:\n");
		}
		switch (num)
		{
		 	 case 0:
		 	 	printf("谢谢使用,再见!\n");
		 	 	return 0;
		 	 case 1:
		 	 	input(); break;
		 	 case 2:
		 		chaxun(); break;
		 	 case 3:
				paiming(); break;		 		
		 	 case 4:
				xiugai(); break;		 	 
		 	 case 5:
		 	 	shanchu(); break;
		 	 case 6:
		 	 	print(); break;
		}
		printf("本次任务结束,回主菜单或退出程序:(1or0)\n"); 
		scanf(" %c", &ch);
	}
	while (ch == '1'); 
	printf("谢谢使用!再见\n");
	return 0;
}
  • 写回答

2条回答 默认 最新

  • 波塞冬的祝福 2021-05-04 10:08
    关注

    什么问题 要说清楚

    评论

报告相同问题?

悬赏问题

  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真
  • ¥15 关于#c语言#的问题,请各位专家解答!