游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2431|回复: 7

菜鸟百思不解的 c程序问题。求高手发发慈悲相救!

[复制链接]

7

主题

14

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2006-10-15 22:55:00 | 显示全部楼层 |阅读模式
用c语言做一个航空售票系统,初有眉目。但有一问,请大家在程序中找到注释“为什么这里必须有个printf,否则程序无法继续运行??”这一行帮我分析一下。真的很奇怪,为什么没有这个printf,程序就陷入僵死状态?谢谢谢谢!

#define NULL 0;
typedef struct GUinform
{
char name[100];
int sex;
char adress[100];
long int phone;
int senum;
struct GUinform *next;
}GUinform,*guinform;


typedef struct Flight
{
char FLightname[100];
int canseated;
guinform guest;
int money;
struct Flight *next;
}Flight,*flight;

void creatFlight(flight *head,int *fltitle)/*fltitle represnts the arrange in order*/
{
  int i, boo;
  flight p,q;
  (*fltitle)=0;
  (*head)=(Flight *)malloc(sizeof(Flight));
  ((*head)->next)=NULL;/*why is it so nessary?*/
   q=(*head);
     do{
          p=(Flight *)malloc(sizeof(Flight));
          printf("Input Flight Class name:\n");
          scanf("%s",&p->FLightname);
          printf("How many can seated?\n");
          scanf("%d",&p->canseated);
          q->next=p;
          q=p;
          q->next=NULL;
          (*fltitle)++;
          printf("continue? 1.yes/2.no \n");
          scanf("%d",&boo);}
     while(boo==1) ;

}
void printFlightname(flight head)
{

  int i=1;
flight p;

   p=head->next;
   while(p)
     {printf("%d.%s\n",i++,p->FLightname);p=p->next;}
}

void spanclass(flight *head,flight *p,int *fltitle)
   {
    flight hhead;
    int i,chonum;
    p=head;
    hhead=*head;
    printFlightname(hhead);
    printf("Input your choice:");
    scanf("%d",&chonum);
    for(i=1;i<=chonum;i++)(*p)=(*p)->next;
     return;
    }
void creatGUinform(flight *p,int *money,int *senum)
{ int i;
   guinform r,s;
   (*p)->money=(*money);

   s=(*p)->guest;
   while(s->next) s=s->next;
   r=(guinform)malloc(sizeof(GUinform));
   r->senum=*senum;
   printf("input the guest's information below:\n");
   printf("Name:");
   scanf("%s",&r->name);
   printf("Sex:1.male 2.female");
   scanf("%d",&r->sex);
   printf("Adress:");
   scanf("%s",&r->adress);
   printf(&quothone:");
   scanf("%ld",&r->phone);
   r->senum++;
   (*senum)=r->senum;
   (*p)->money++;
   printf("\n\n\nCheck the information:\n");
   printf("Name: %s\n",r->name);
   if(r->sex==1)
   printf("Sex: male\n");
   else if(r->sex==2)
   printf("Sxe: female\n");
   printf("Adress: %s\n",r->adress);
   printf("Phone: %ld\n",r->phone);
   printf("Serial Number: %d\n",r->senum);
   printf("Please Remeber the Serial Number firmly,it's useful when you use back ticket system.\n");
   printf("The Serial Number is: %d\n",r->senum);
   s->next=r;
   s=r;
   s->next=NULL;
   }

void buyticket(flight *head,flight *p,int *fltitle,int *money,int *senum)
{
int boo;
spanclass(head,p,fltitle);
   printf("aa\n");  /*为什么这里必须有个printf,否则程序无法继续运行??*/
   do
     {
     creatGUinform(p,money,senum);
     printf("continue? 1.yes/2.no \n");
     scanf("%d",&boo);
     }
    while(boo==1);


}

void backticket(flight *head,flight *p,int *fltitle,int *money)
{

int senum,i;
guinform r,s;
(*p)->money=(*money);
spanclass(head,p,fltitle);
printf("Input your serial number:\n");
scanf("%d",&senum);
r=(*p)->guest;
for(i=0;i<=senum-1;i++) r=r->next;
s=r->next;
r->next=s->next;
free(s);
(*p)->money--;
}



main()
{
int senum=0;
flight head,p;
int money,fltitle;
creatFlight(&head,&fltitle);
buyticket(&head,&p,&fltitle,&money,&senum);
getch();
}

27

主题

179

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
发表于 2006-10-16 00:24:00 | 显示全部楼层

Re:菜鸟百思不解的 c程序问题。求高手发发慈悲相救!

拜托,你的
spanclass(head,p,fltitle);
   printf("aa\n");  /*为什么这里必须有个printf,否则程序无法继续运行??*/
   do
     {
     creatGUinform(p,money,senum);

spanclass根本没有给p附值,在createGUinform里边的p根本就是个非法指针,程序是肯定有问题的。至于为什么有printf程序才能继续,这个不清楚。

52

主题

637

帖子

1420

积分

金牌会员

Rank: 6Rank: 6

积分
1420
发表于 2006-10-16 11:01:00 | 显示全部楼层

Re:菜鸟百思不解的 c程序问题。求高手发发慈悲相救!

p是传进来的东西,不会没赋值吧?我没仔细看.

0

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
发表于 2006-10-16 13:40:00 | 显示全部楼层

Re:菜鸟百思不解的 c程序问题。求高手发发慈悲相救!

没仔细看,建议楼主把变量都赋初始值试试

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-10-16 16:54:00 | 显示全部楼层

Re:菜鸟百思不解的 c程序问题。求高手发发慈悲相救!

楼主的程序看完了,本人除了不给提示只外,还要骂一句:果然是垃圾程序!
scanf("%d",&chonum); //输入1w你只初始化了3个指针就好玩了,嘿嘿!
    for(i=1;i<=chonum;i++)(*p)=(*p)->next; //Flight数据=Flight*数据?强!
     return;

3

主题

79

帖子

79

积分

注册会员

Rank: 2

积分
79
发表于 2006-10-16 17:47:00 | 显示全部楼层

Re:菜鸟百思不解的 c程序问题。求高手发发慈悲相救!

别人已经说了自己是菜鸟,嘴里留点德吧

7

主题

14

帖子

16

积分

新手上路

Rank: 1

积分
16
 楼主| 发表于 2006-10-16 22:21:00 | 显示全部楼层

Re: 菜鸟百思不解的 c程序问题。求高手发发慈悲相救!

问题解决了,多亏5楼提醒。是关于p 指针的问题。
“ for(i=1;i<=chonum;i++)(*p)=(*p)->next ” 没问题,问题在前面的“p=head”,p和head都是双指针,应该为“(*p)=(*head)”.

致5楼:虽然不喜欢你的冷嘲热讽,但还要感谢你。知恩图报乃传统美德。

同时向其他关心过本人的楼层高人衷心表示感谢!

0

主题

202

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
发表于 2006-10-17 23:53:00 | 显示全部楼层

Re:菜鸟百思不解的 c程序问题。求高手发发慈悲相救!

呵呵, 鄙视看不起人的猪!楼主厚道,有美德。没有关系, 我来帮你说他!
他狗子就一势利眼,asshole, son of a bitch! **** him
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 15:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表