有段代码不知道怎么错了 大家帮帮忙指点指点

时间:2022-09-05 21:13:50
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define MAX 80
#define MAXX 6
#define MIXX 3
//游客信息
typedef struct node2
{
int ID,RD;
char vname[30],dname[30];
struct node2 *next;
}VS;

VS *createv(VS *q)
{
VS *r;
int i,m=1;
r=(VS*)malloc(sizeof(VS));
r=q;
while(m!=2)
{
q->next=q;
printf("游客的ID:");
scanf("%d",q->ID);
printf("游客的姓名:");
scanf("%s",q->vname);
printf("1、继续为本组输入游客信息;2、输入完毕;");
scanf("%d",&m);
}
return r;
}
/*
//6、游客信息的建立
DM *createv(DM *root,VS *q)
{
int j,k,m,ch1=0,ch2=0;
VS *r;
if(root)
{
j=0;
root->lchild=createv(root->lchild,q);
printf("本组游客旅行点的名字是%d-%s\t\n",root->ID,root->name);
while(ch1!=1)
{
r=(VS*)malloc(sizeof(VS));
printf("游客ID:");
scanf("%d",root->next->ID);
printf("游客姓名:");
scanf("%s",root->next->vname);
q=root->next;
r=q;
q=r->next;
j++;
printf("是否想结束对本组的操作?\n");
printf("1、放弃;2、继续;\n");
scanf("%d",&ch1);
}
if(j>MAXX)
{
printf("有%d到此处游玩!游客过多请分流!\n他们可以有以下两个选项:\n");
for(k=0;k<MAXX;k++)
q=q->next;
for(k;k<=j;k++)
{
printf("1、放弃旅游;\t2、选者到其他景点;\n");
scanf("%d",&m);
switch(m)
{
case 1:
r=q;q=q->next;
free(r);
break;
case 2:
printf("请输入景点编号!\n");
scanf("%d",&q->DID);
root=vinsert(root,q);
r=q;q=q->next;
free(r);
break;
}
}
}
if(j<MIXX)
{
printf("只有%d到此处游玩!游客太少所以将取消此景点旅游项目!\n他们可以有以下两个选项:\n");
for(k=0;k<MAXX;k++)
{
printf("1、放弃旅游;\t2、选者到其他景点;\n");
scanf("%d",&m);
switch(m)
{
case 1:
r=q;q=q->next;
free(r);
break;
case 2:
printf("请输入景点编号!\n");
scanf("%d",&q->DID);
root=vinsert(root,q);
r=q;q=q->next;
free(r);
break;
}
}
}
printf("所有游客信息已经录入了吗?\n");
printf("1、录入完成;2、录入还未完成;\n");
scanf("%d",&ch2);
if(ch2==2)
createv(root->rchild,q);
}
return root;
}
*/

void main()
{
//DM *root,*q;
VS *visitor,*head[MAX],*r; 
int m,k,ID,n=1,j=1,i=0,h;
//root=(DM*)malloc(sizeof(DM));
//root=NULL;
visitor=(VS*)malloc(sizeof(VS));
visitor=NULL;
printf("\t这是一个旅游信息管理系统!\n");
printf("\t你可以进行以下相关操作!\n");
printf("\t*********************\n");
printf("\t1、旅游地点信息的录入;\n\t2、旅游地点的查找;\n\t3、旅游地点的插入;\n\t4、旅游地点的删除\n\t5、旅游地点的打印;\n");
printf("\t6、游客信息的录入;\n\t7、某旅游地点的游客信息的查找;\n\t8、最近游客的报名操作;\n\t9、某个旅游景点游客的数量统计\n\t10、游客报名信息的打印;\n\t11、退出程序\n\t");
printf("*********************\n\n");
while(n!=0)
{
printf("请输入你的选择数字:");
scanf("%d",&m);
switch(m )
{
case 6:
printf("请按照提示把选择到同一地点旅游的游客的信息输入到计算机中!\n");
printf("注意:请在第一组数据中输入景点的相关信息!包括景点的编号和名字\n");
while(j!=2)
{
head[i]=(VS*)malloc(sizeof(VS));
printf("景点编号是:");
scanf("%d",&h);
printf("景点的名字是:");
scanf("%s",head[i]->dname);
head[i]->RD=h;
head[i]->ID=NULL;
head[i]=createv(head[i]);
printf("1、输入下一组游客的信息!\n2、所有游客信息输入完毕!结束操作!\n");
scanf("%d",&j);
i++;
}
break;
case 11:
n=0;
break;
default:
printf("数字输入不对!请重新输入!\n");
break;
}

}

}

4 个解决方案

#1



VS *createv(VS *q)
{
VS *r;
int i,m=1;
if(NULL == q)
  q=(VS*)malloc(sizeof(VS));
r=q;
while(m!=2)
{
if(NULL == q)
  q=(VS*)malloc(sizeof(VS));
printf("游客的ID:");
scanf("%d",q->ID);
printf("游客的姓名:");
scanf("%s",q->vname);
q=q->next;
printf("1、继续为本组输入游客信息;2、输入完毕;");
scanf("%d",&m);
}
return r;
}

#2



VS *createv(VS *q)
{
VS *r;
int i,m=1;
if(NULL == q)
  q=(VS*)malloc(sizeof(VS));
r=q;
while(1)
{
printf("游客的ID:");
scanf("%d",q->ID);
printf("游客的姓名:");
scanf("%s",q->vname);
q=q->next;
printf("1、继续为本组输入游客信息;2、输入完毕;");
scanf("%d",&m);
if(2 == m) break;
q=(VS*)malloc(sizeof(VS));
}
return r;
}

#3


VS *createv(VS *q)
{
VS *r;
int m = 1;

if(NULL == q)
{
q =(VS*)malloc(sizeof(VS));
}
  
r = q;
r->next = NULL;

while(1)
{
printf("游客的ID:");
scanf("%d", &q->ID);//q->ID改成&q->ID

printf("游客的姓名:");
scanf("%s", q->vname);


//q = q->next;//这句也是不行的,这样建立不了链表,只能建立零散的节点。

printf("1、继续为本组输入游客信息;2、输入完毕;");
scanf("%d", &m);

if(2 == m) break;

q = (VS*)malloc(sizeof(VS));

q->next = r; //采用头插法建立链表
    r = q;
}
return r;
}

#4


谢谢大家的帮助   我已经解决了!

#1



VS *createv(VS *q)
{
VS *r;
int i,m=1;
if(NULL == q)
  q=(VS*)malloc(sizeof(VS));
r=q;
while(m!=2)
{
if(NULL == q)
  q=(VS*)malloc(sizeof(VS));
printf("游客的ID:");
scanf("%d",q->ID);
printf("游客的姓名:");
scanf("%s",q->vname);
q=q->next;
printf("1、继续为本组输入游客信息;2、输入完毕;");
scanf("%d",&m);
}
return r;
}

#2



VS *createv(VS *q)
{
VS *r;
int i,m=1;
if(NULL == q)
  q=(VS*)malloc(sizeof(VS));
r=q;
while(1)
{
printf("游客的ID:");
scanf("%d",q->ID);
printf("游客的姓名:");
scanf("%s",q->vname);
q=q->next;
printf("1、继续为本组输入游客信息;2、输入完毕;");
scanf("%d",&m);
if(2 == m) break;
q=(VS*)malloc(sizeof(VS));
}
return r;
}

#3


VS *createv(VS *q)
{
VS *r;
int m = 1;

if(NULL == q)
{
q =(VS*)malloc(sizeof(VS));
}
  
r = q;
r->next = NULL;

while(1)
{
printf("游客的ID:");
scanf("%d", &q->ID);//q->ID改成&q->ID

printf("游客的姓名:");
scanf("%s", q->vname);


//q = q->next;//这句也是不行的,这样建立不了链表,只能建立零散的节点。

printf("1、继续为本组输入游客信息;2、输入完毕;");
scanf("%d", &m);

if(2 == m) break;

q = (VS*)malloc(sizeof(VS));

q->next = r; //采用头插法建立链表
    r = q;
}
return r;
}

#4


谢谢大家的帮助   我已经解决了!