wuliangtdi 发表于 2019-8-26 22:31:58

单链表输入航班信息的问题

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
typedef struct airline
{
    char line_num;//航班号
    char start_place;//起飞地
    char end_place;//目的地
    char start_time;//起飞时间
    char end_time;//降落时间
    int total;//座位总数
    int left;//剩余座位
    int count;
    struct airline *next;//下一个结点
} airline,*Airline;
//*初始化单链表**//
void InitList_1(Airline *pheadline)
{
        *pheadline=(Airline)malloc(sizeof(airline));
        (*pheadline)->next=NULL;
}
airline* Put_Flight_Information(int n, Airline pheadline)//录入航班函数: n为所要录入航班的数量:
{
        color(4);
        int i;
        int b;
        airline *temp,*p,*Investigation;
        Investigation=pheadline->next;
        p=pheadline;
            pheadline->count = n;
            for(i=0; i<n; i++)
            {
                    temp=(airline *)malloc(sizeof(airline));
                    printf("\t\t请输入第%d个航班的航班号:\n\t\t",i+1);
                scanf("%s",temp->line_num);
                while(Investigation!=NULL)
                {
                        if(strcmp(Investigation->next->line_num,temp->line_num)!=0)
                        {
                                Investigation=Investigation->next;
                        }
                        else
                        {
                                printf("\t\t您输入的航班号重复,请重新输入:\n\t\t");
                                scanf("%s",temp->line_num);
                                Investigation=pheadline->next;                                          
                        }
                }
                printf("\t\t请输入第%d个航班起飞点\n\t\t",i+1);
                scanf("%s",temp->start_place);
                printf("\t\t请输入第%d个航班目的地\n\t\t",i+1);
                scanf("%s",temp->end_place);
                printf("\t\t请输入第%d个航班起飞的时间\n\t\t",i+1);
                scanf("%s",temp->start_time);
                printf("\t\t请输入第%d个航班降落的时间\n\t\t",i+1);
                scanf("%s",temp->end_time);
                getchar();
                printf("\t\t请输入第%d个航班的座位\n\t\t",i+1);
                scanf("%d",temp->total);
                getchar();
                temp->left=temp->total;
                //printf("\t\t你好\n");
                p->next=temp;
                p=temp;
                //printf("\t\t你好\n");
                if(i==n-1)
                {
                        p->next=NULL;
                }
        }
        return pheadline;

}
int main()
{
        Airline bb;
        InitList_1(&bb);
        Put_Flight_Information(3,bb);
        return 0;
}

大佬们,我想问一下就是那个Put_Flight_Information函数里面,输入到最后一个(请输入第%d个航班的座位)那里,程序就会错误,不能完整输入,我已经找了好久了,找不到问题所在,望大佬们看看{:5_100:}

灰色的天空 发表于 2019-8-26 22:31:59

其中还有一两点小细节帮你改了,你自己对照着代码看 ̄  ̄)σ

wuliangtdi 发表于 2019-8-26 22:35:00

我用的是code::Blocks写的

灰色的天空 发表于 2019-8-27 00:46:00

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
typedef struct airline
{
    char line_num;//航班号
    char start_place;//起飞地
    char end_place;//目的地
    char start_time;//起飞时间
    char end_time;//降落时间
    int total;//座位总数
    int left;//剩余座位
    int count;
    struct airline *next;//下一个结点
} airline,*Airline;
//*初始化单链表**//
void InitList_1(Airline*pheadline)
{
      *pheadline=(Airline)malloc(sizeof(airline));
      (*pheadline)->next=NULL;
}
airline* Put_Flight_Information(int n, Airline pheadline)//录入航班函数: n为所要录入航班的数量:
{
      //color(4);
      int i;
      int b;
      airline *temp,*p,*Investigation;
      p=pheadline;
            pheadline->count = n;
            for(i=0; i<n; i++)
            {
                  temp=(airline*)malloc(sizeof(airline));
                  printf("\t\t请输入第%d个航班的航班号:\n\t\t",i+1);
                scanf("%s",temp->line_num);
                Investigation=pheadline->next;
                while(Investigation!=NULL)
                {
                        if(strcmp(Investigation->line_num,temp->line_num)!=0)
                        {
                              Investigation=Investigation->next;
                        }
                        else
                        {
                              printf("\t\t您输入的航班号重复,请重新输入:\n\t\t");
                              scanf("%s",temp->line_num);
                              Investigation=pheadline->next;                                          
                        }
                }
                printf("\t\t请输入第%d个航班起飞点\n\t\t",i+1);
                scanf("%s",temp->start_place);
                printf("\t\t请输入第%d个航班目的地\n\t\t",i+1);
                scanf("%s",temp->end_place);
                printf("\t\t请输入第%d个航班起飞的时间\n\t\t",i+1);
                scanf("%s",temp->start_time);
                printf("\t\t请输入第%d个航班降落的时间\n\t\t",i+1);
                scanf("%s",temp->end_time);
                //getchar();
                printf("\t\t请输入第%d个航班的座位\n\t\t",i+1);
                scanf("%d",&(temp->total));
                //getchar();
                temp->left=temp->total;
                //printf("\t\t你好\n");
                p->next=temp;
                p=temp;
                //printf("\t\t你好\n");
                     p->next = NULL;
      }
      return pheadline;
}
int main()
{
      Airline bb;
      InitList_1(&bb);
      Put_Flight_Information(3,bb);
      return 0;
}

小修改了下

wuliangtdi 发表于 2019-8-27 06:45:18

灰色的天空 发表于 2019-8-27 00:46
小修改了下

好像temp->total那里没有加取址符   哇这真的是个低级错误啊谢了

wuliangtdi 发表于 2019-8-27 06:53:11

灰色的天空 发表于 2019-8-27 00:46
小修改了下

还有一个问题就是第二次输入相同的航班号的时候没有提示您输入的航班号重复,请重新输入。是不是while循环那里有问题啊?

灰色的天空 发表于 2019-8-27 15:34:30

你拷贝我给你改的。你第二次不行是因为你在添加的节点next未知,但是每次比较时又要比较到null.所以不行。

wuliangtdi 发表于 2019-8-27 16:43:58

灰色的天空 发表于 2019-8-27 15:35
其中还有一两点小细节帮你改了,你自己对照着代码看 ̄  ̄)σ

果然可以了 蟹蟹丫{:5_95:}
页: [1]
查看完整版本: 单链表输入航班信息的问题