c语言:课后练习的小程序崩溃了....

#include<stdio.h>#include<string.h>#include<stdlib.h>#defineMAX500intmain(void){doubl... #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 500

int main(void)
{
double enter=0.0,
butter=0.0,
end=0.0;
double *penter[20]={NULL};
int i=0,i2=0;
printf("你可以输入一滴浮点数,数之间用空格隔开.我帮你记平均数.\n");
while(1)
{printf("%s",i==0?"请输入一个数字,空格继续输入其他,回车结束输入\n":"请继续输入数字,空格继续输入其他数字,回车结束输\n");

scanf("%lf",penter[i]);
penter[i]=(double*)malloc(i*sizeof(double));
i++;
if(**(penter+i)=0)break;
}

for(i2=0;i2<i;i2++)
butter += **(penter+i);
printf("平均值为%.4lf",butter/--i);
return 0;
}

不断增删代码调试.确定崩溃的原因大概在中间的
scanf("%lf",penter[i]);
penter[i]=(double*)malloc(i*sizeof(double));
i++;
if(**(penter+i)=0)break;
但具体的就看不懂了.
展开
 我来答
仲奇正2q
2013-08-13
知道答主
回答量:21
采纳率:0%
帮助的人:17.4万
展开全部

你这里就必须要用动态内存分配吗?你的错误主要就是在动态内存分配上。还有你自己的代码有很多漏洞,while里面最后那个if要用双等号,你这样写就是永远为非。你的for循环里面应该是butter += **(penter+i2);而且结构上也有一定问题,我帮你改了一下,没有用动态内存分配,直接用的数组

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 500

int main(void)
{
    double enter=0.0,
           butter=0.0,
           end=0.0;
    double penter[20]={0};
    int i=0,i2=0;
printf("你可以输入一滴浮点数,数之间用空格隔开.我帮你记平均数.\n");
while(1)
{
printf("%s",i==0?"请输入一个数字,空格继续输入其他,输入0结束\n":"");
scanf("%lf",&penter[i]);
if(0 == penter[i]) break;
i++;
}
for(i2=0;i2<i;i2++)
butter += penter[i2];
printf("平均值为%.4lf",butter/i);
return 0;
}
更多追问追答
追问
这是个课后练习.用数组写过类似的,再写一次就没什么意义.所以想练练手写刚看完的指针和动态内存.不过指针数组那有很大的问题...我老分不清指针数组各层次地址代表的意义 ...
追答

我安你的意思写了一个有注释的,用的是比喻,就是指针和门牌号那个

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 500

int main(void)
{
    double enter=0.0,
           butter=0.0,
           end=0.0;
    double *penter[20]={NULL};//在这里,我们生成了很多的门牌号,但是只有门牌号没有房间。 
    int i=0,i2=0;
printf("你可以输入一滴浮点数,数之间用空格隔开.我帮你记平均数.\n");
while(1)
{
printf("%s",i==0?"请输入一个数字,空格继续输入其他,输入0结束\n":"");
penter[i]=(double*)malloc(sizeof(double));//在这里,我们为对应的门牌号生成一个房间。 
scanf("%lf",penter[i]);//现在我们才可以往对应的房间放东西。 
if(**(penter+i)==0)break;
i++;
}

for(i2=0;i2<i;i2++)
butter += **(penter+i2);
printf("平均值为%.4lf",butter/i);
return 0;
}
starking1983
2013-08-13 · TA获得超过278个赞
知道小有建树答主
回答量:112
采纳率:0%
帮助的人:68.9万
展开全部
scanf("%lf",penter[i]);
penter[i]=(double*)malloc(i*sizeof(double));
i++;
if(**(penter+i)=0)break;
应该改为
penter[i]=(double*)malloc(sizeof(double));//应该先分配内存,在进行赋值操作。
scanf("%lf",penter[i]);
if(**(penter+i)==0)break; //i++以后,penter[i]还没有分配内存。直接使用未分配的内存出错。

i++;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
揽火8
2013-08-13 · TA获得超过494个赞
知道答主
回答量:189
采纳率:0%
帮助的人:47.4万
展开全部
penter[i]=(double*)malloc(i*sizeof(double));
改成penter[i]=(double*)malloc(sizeof(double));
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式