C语言编程问题,求高手指教。我错在哪里

/*编写一个函数,要求这个函数能够在一个有序的数组中间插入用户从键盘键入的一个新的数,要求插入后的数组任然有序,并编写主程序完成对该函数的调用,要求该程序能实现任意个数的... /*编写一个函数,要求这个函数能够在一个有序的数组中间插入用户从键盘键入的一个新的数,要求插入后的数组任然有序,
并编写主程序完成对该函数的调用,要求该程序能实现任意个数的插入,任意个由用户通过键盘输入数字确定,每次插入一个数。*/
#include <stdio.h>

#include <stdlib.h>
void paixu(int*p,int num); //函数声明

void main()
{
int *p=NULL,n,m,k,s,i;
printf("请输入数组元素的个数:");
scanf("%d",&n);
p=(int*)malloc(n*sizeof(int)); /*向内存申请数组的内存空间*/
if(p==NULL)
{
printf("没有足够的内存空间");
exit(0);
}
printf("请输入数组元素的初始值:"); /*输入元素的初始值*/
for(i=0;i<n;i++)
scanf("%d",p+i);
paixu(p,n);
printf("你输入的数组经过排序后为:");
for(i=0;i<n;i++)
printf("%d ",p[i]);

printf("请输入你要插入的数据个数:");
scanf("%d",&m);
p=(int*)malloc((m+n)*sizeof(int)); /*向内存申请数组的内存空间*/
if(p==NULL)
{
printf("没有足够的内存空间");
exit(0);
}
for(k=0;k<m;k++)
scanf("%d",p[n+k]);
paixu(p,m+n);
printf("插入这几个数后排序后为:");
for(s=0;s<n+m;s++)
printf("%d ",p[s]);

}

void paixu(int *p,int num) //定义排序函数
{
int i,j,t;
for(i=0;i<num;i++)
{
for(j=0;j<num-i-1;j++)
if(p[j]>p[j+1])
{
t=p[j];

p[j]=p[j+1];

p[j+1]=t;
}
}
}
展开
 我来答
mingbuxuchuan9
2011-12-28
知道答主
回答量:42
采纳率:0%
帮助的人:13.8万
展开全部
//樱银这里不能在这样重新申请空间了,申请之后前面的n个数就不是你输入的n个数了
p=(int*)malloc((m+n)*sizeof(int)); /*向内存申请数组的内存空间*/
if(p==NULL)
{
printf("没有足够的内存空间");
exit(0);
}
for(k=0;k<m;k++)
scanf("%d",p[n+k]);//这里改拆和为p+n+k;

其他的你自己在调试一下…旅颂盯…
kaixingui2012
2011-12-28 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6265万
展开全部
scanf("%d",&m);
p=(int*)malloc((m+n)*sizeof(int)); /*向内存申请数组的内存空间*/谨雀袜
这句操作结束后,你原来的空岁者间丢失了!!!!!重新定义祥激一个指针来操作吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式