C语言 求大佬们看看哪里错了 一直显示段错误

C语言 求大佬们看看哪里错了 一直显示段错误

输入格式:

输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。

考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。

输出格式:

对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。
输入样例:
4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4
输出样例:
3310120150912002 2
3310120150912119 1

#include<stdio.h>
#include<stdlib.h>
typedef struct imformation{
char number[17];
char s;
char e;
}inf;
int main(){
int n,m,i,gap,k,a;
inf tem;
scanf("%d",&n);
getchar();
inf *p=0;
p=(inf *)malloc(sizeof(inf)*n);
for(i=0;i<n;i++){ //动态分配空间进行信息输入
scanf("%s",p[i].number);
getchar();
scanf("%c",&p[i].s);
getchar();
scanf("%c",&p[i].e);
getchar();
}
for(gap=n/2;gap>0;gap/=2){ //信息座位号希尔排序
for(i=gap;i<n;i++){
if(p[i].s<p[i-gap].s){
tem=p[i];
k=i-gap;
while(k>=0&&tem.s<p[k].s){
p[k+gap]=p[k];
k-=gap;
}
p[k+gap]=tem;
}
}
}
scanf("%d",&m);
for(i=1;i<=m;i++){ //输出信息
scanf("%d",&a);
printf("%s %c\n",p[a-1].number,p[a-1].e);
}
free(p );
return 0;
}

各位大佬们帮忙看看

上一篇:浅谈AngularJS启动引导过程


下一篇:立方变自身