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;
但具体的就看不懂了. 展开
#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;
但具体的就看不懂了. 展开
3个回答
展开全部
你这里就必须要用动态内存分配吗?你的错误主要就是在动态内存分配上。还有你自己的代码有很多漏洞,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;
}
展开全部
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++;
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++;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
penter[i]=(double*)malloc(i*sizeof(double));
改成penter[i]=(double*)malloc(sizeof(double));
改成penter[i]=(double*)malloc(sizeof(double));
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询