请大家指点我一下,这个程序出现了问题,谢谢

huyu0002007 2008-10-15 12:16:54
要求是在一批作业(作业信息包含名称,时间,指向的下一个作业等等)中做出排序。编译没有出错,但是就是运行时有问题!请大家指点一下!有劳了!
#include "iostream"
#define NULL 0
#define NAME 1
#define TIME 2
#define N 3
#define TYPE struct JCB
using namespace std;
struct JCB
{
char name[N];
int time;
struct JCB *next;
};
void print(int ss[N])
{
for(int i=0;i<N;i++)
{
cout<<ss[i]<<" ";
}
}
/**
creat struct
**/
struct JCB*creat()
{
struct JCB *head,*current,*tail;
int n=0;
head=current=tail=NULL;
current=(TYPE*)malloc(sizeof(TYPE));

cout<<"input name,time"<<endl;
cin>>current->name>>current->time;

current->next=NULL;
while(current->time!=0)
{
if(n==0)
head=tail=current;
else
{
tail->next=current;
tail=current;
}
n++;

cout<<"input name,time"<<endl;
cin>>current->name>>current->time;
current->next=NULL;
}
return (head);
}
void name_sort(struct JCB *p)
{
int i,j,k;
char *temp;
char *sal_name[N];

for(i=0;i<N;i++)
{
sal_name[i]=p->name;
p=p->next;
}
for(i=0;i<N;i++)
{
k=i;
for(j=i+1;j<N;i++)
if(strcmp(sal_name[k],sal_name[j])>0)
k=j;
if(k!=i)
{
temp=sal_name[i];
sal_name[i]=sal_name[k];
sal_name[k]=temp;
}
}

cout<<"name的排序:"<<endl;
for(i=0;i<N;i++)
{
cout<<sal_name[i];
}
for(i=0;i<N;i++)
{
cout<<sal_name[i]<<" ";
}
cout<<endl;
}
/**
从小到大排序
**/
void normol_sort(int s[N])
{
int i,j,temp;
for(i=0;i<N;i++)
for(j=0;j<N+1-i;j++)
{
if(s[j]>s[j+1])
{
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
}
}
print(s);
cout<<endl;

}

int main()
{
struct JCB *h;
struct JCB *p;
int sort_kind;
int a[N];

h=creat();
p=h;
cout<<"选择排序种类"<<endl;
cin>>sort_kind;
<-----------------这个以后就开始有问题了!!!!!!!!!!
switch(sort_kind)
{
case NAME:
name_sort(p);
break;
case TIME:
for(int i=0;i<N;i++)
{
a[i]=p->time;
p=p->next;
}
for(i=0;i<N;i++)
{
cout<<a[i]<<endl;
}
normol_sort(a);
break;
}

return 0;
}


...全文
81 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
baihacker 2008-10-15
  • 打赏
  • 举报
回复
#include "iostream" 
#define NULL 0
#define NAME 1
#define TIME 2
#define N 3
#define TYPE struct JCB
using namespace std;
struct JCB
{
char name[N];
int time;
struct JCB *next;
};
void print(int ss[N])
{
for(int i=0;i <N;i++)
{
cout <<ss[i] <<" ";
}
}
/**
creat struct
**/
struct JCB*creat()
{
struct JCB *head,*current,*tail;
int n=0;
head=current=tail=NULL;
current=(TYPE*)malloc(sizeof(TYPE));

cout <<"input name,time" <<endl;
cin>>current->name>>current->time;

current->next=NULL;
while(current->time!=0)
{
if(n==0)
head=tail=current;
else
{
tail->next=current;
tail=current;
}
n++;

cout <<"input name,time" <<endl;
current=(TYPE*)malloc(sizeof(TYPE));
cin>>current->name>>current->time;
current->next=NULL;
}
free(current);
return (head);
}
void name_sort(struct JCB *p)
{
int i,j,k;
char *temp;
char *sal_name[N];

for(i=0;i <N;i++)
{
sal_name[i]=p->name;
p=p->next;
}
for(i=0;i <N;i++)
{
k=i;
for(j=i+1;j <N;j++)
if(strcmp(sal_name[k],sal_name[j])>0)
k=j;
if(k!=i)
{
temp=sal_name[i];
sal_name[i]=sal_name[k];
sal_name[k]=temp;
}
}

cout <<"name的排序:" <<endl;
for(i=0;i <N;i++)
{
cout <<sal_name[i];
}
for(i=0;i <N;i++)
{
cout <<sal_name[i] <<" ";
}
cout <<endl;
}
/**
从小到大排序
**/
void normol_sort(int s[N])
{
int i,j,temp;
for(i=0;i <N;i++)
for(j=0;j <N+1-i;j++)
{
if(s[j]>s[j+1])
{
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
}
}
print(s);
cout <<endl;

}

int main()
{
struct JCB *h;
struct JCB *p;
int sort_kind;
int a[N];

h=creat();
p=h;
cout <<"选择排序种类" <<endl;
cin>>sort_kind;
// <-----------------这个以后就开始有问题了!!!!!!!!!!
switch(sort_kind)
{
case NAME:
name_sort(p);
break;
case TIME:
for(int i=0;i <N;i++)
{
a[i]=p->time;
p=p->next;
}
for(i=0;i <N;i++)
{
cout <<a[i] <<endl;
}
normol_sort(a);
break;
}

return 0;
}
jqx_ah 2008-10-15
  • 打赏
  • 举报
回复
既然编译通过,
LZ跟踪数据进行调试 ,不就成了吗?

这个题 应该重点在指针的操作上,
抽出数据时的操作,
插入数据时的操作,应为重点!

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧