求助一个动态内存分配的问题

DearATRI 2020-06-15 09:16:38
结课赶作业时遇到的问题,求大佬们帮忙解答
为什么给array和p分配动态空间的那个语句编译时现实错误啊,感谢指导


#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void main()
{
int i,j,n;
float *p;
float *array;
if (array=(float*)calloc(9999,sizeof(float))&&p=(float*)malloc(sizeof(float))) ;
else printf("fail!");
gets(array);
n=strlen(array)
for(i=0;i<n;i++)
for(j=n-i-1;j>0;j--)
{
if (array[j]>array[j-1])
{
*p=array[j];
array[j]=array[j-1];
array[j-1]=*p;
}
}
for(i=0;i<n;i++)
printf("%.2f",array[i]);
free(array);
free(p);
}
...全文
121 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_1457346882 2020-06-17
  • 打赏
  • 举报
回复
引用 4 楼 自信男孩 的回复:
[quote=引用 1 楼 qq_1457346882 的回复:]
array=(float*)calloc(9999,sizeof(float));
p=(float*)malloc(sizeof(float)) ;
if(array==NULL||p==NULL){printf("fail")};
else ...
或者if(array!=NULL&&p!=NULL)
...
else printf...
还有,你这是要实现底下的内容吧?if判断完了就没有操作了直接else?完了也没{},你这且不说判断规不规范,说实话你这个ifelse对下面的代码没有任何影响,不管你这个结果怎么样都会执行

 float *p=NULL;
float *array=NULL;//指针无值赋NULL,不然是野指针
array=(float*)calloc(9999,sizeof(float));
 p=(float*)malloc(sizeof(float)) ;
 if(array==NULL||p==NULL){
  printf("fail");
 }
 else {
gets(array);
n=strlen(array);//不要;的?
for(i=0;i<n;i++){
for(j=n-i-1;j>0;j--)
{
if (array[j]>array[j-1])
{
*p=array[j];
array[j]=array[j-1];
array[j-1]=*p;
}
}
  }
for(i=0;i<n;i++){
printf("%.2f",array[i]);
}
free(array);
free(p);

现在还不熟练的时候不要省略{},哪怕只有一句可以省的时候也用上,不然你找错都不知道在哪找,没有细看你要做的功能,差不多应该是这样。释放的前提是你要有

gets可以对float类型缓存?[/quote]
我没看他的代码,上面说了,我主要是想说他的逻辑问题,没注意他的代码实现用的对不对
Tryagain2006 2020-06-16
  • 打赏
  • 举报
回复
    if (array=(float*)calloc(9999,sizeof(float))&&p=(float*)malloc(sizeof(float)))  ; 
else printf("fail!");

这句话 有问题,在 IF 后面直接加一分号 ; ,怪怪的。
qq_1457346882 2020-06-16
  • 打赏
  • 举报
回复
array=(float*)calloc(9999,sizeof(float));
p=(float*)malloc(sizeof(float)) ;
if(array==NULL||p==NULL){printf("fail")};
else ...
或者if(array!=NULL&&p!=NULL)
...
else printf...
还有,你这是要实现底下的内容吧?if判断完了就没有操作了直接else?完了也没{},你这且不说判断规不规范,说实话你这个ifelse对下面的代码没有任何影响,不管你这个结果怎么样都会执行

 float *p=NULL;
float *array=NULL;//指针无值赋NULL,不然是野指针
array=(float*)calloc(9999,sizeof(float));
 p=(float*)malloc(sizeof(float)) ;
 if(array==NULL||p==NULL){
  printf("fail");
 }
 else {
gets(array);
n=strlen(array);//不要;的?
for(i=0;i<n;i++){
for(j=n-i-1;j>0;j--)
{
if (array[j]>array[j-1])
{
*p=array[j];
array[j]=array[j-1];
array[j-1]=*p;
}
}
  }
for(i=0;i<n;i++){
printf("%.2f",array[i]);
}
free(array);
free(p);

现在还不熟练的时候不要省略{},哪怕只有一句可以省的时候也用上,不然你找错都不知道在哪找,没有细看你要做的功能,差不多应该是这样。释放的前提是你要有
自信男孩 2020-06-16
  • 打赏
  • 举报
回复
引用 1 楼 qq_1457346882 的回复:
array=(float*)calloc(9999,sizeof(float));
p=(float*)malloc(sizeof(float)) ;
if(array==NULL||p==NULL){printf("fail")};
else ...
或者if(array!=NULL&&p!=NULL)
...
else printf...
还有,你这是要实现底下的内容吧?if判断完了就没有操作了直接else?完了也没{},你这且不说判断规不规范,说实话你这个ifelse对下面的代码没有任何影响,不管你这个结果怎么样都会执行

 float *p=NULL;
float *array=NULL;//指针无值赋NULL,不然是野指针
array=(float*)calloc(9999,sizeof(float));
 p=(float*)malloc(sizeof(float)) ;
 if(array==NULL||p==NULL){
  printf("fail");
 }
 else {
gets(array);
n=strlen(array);//不要;的?
for(i=0;i<n;i++){
for(j=n-i-1;j>0;j--)
{
if (array[j]>array[j-1])
{
*p=array[j];
array[j]=array[j-1];
array[j-1]=*p;
}
}
  }
for(i=0;i<n;i++){
printf("%.2f",array[i]);
}
free(array);
free(p);

现在还不熟练的时候不要省略{},哪怕只有一句可以省的时候也用上,不然你找错都不知道在哪找,没有细看你要做的功能,差不多应该是这样。释放的前提是你要有

gets可以对float类型缓存?
自信男孩 2020-06-16
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

//void main()
int main()
{
int i,j,n;
float *p;
float *array;

/*
if (array=(float*)calloc(9999,sizeof(float))&&p=(float*)malloc(sizeof(float)))
;
else
printf("fail!"); //fail就完了?后面使用array和p那不一样有问题吗?
*/
array = (float *)calloc(999, sizeof(float));
if (!array)
return -1;
p = (float *)malloc(sizeof(float));
if (!p)
return -1;

gets(array); //对float缓存使用gets,我感觉是不是走错门了?程序还能执行吗?
n=strlen(array)
for(i=0;i<n;i++)
for(j=n-i-1;j>0;j--)
{
if (array[j]>array[j-1])
{
*p=array[j];
array[j]=array[j-1];
array[j-1]=*p;
}
}
for(i=0;i<n;i++)
printf("%.2f",array[i]);
free(array);
free(p);
}


基础问题先弄明白,gets是针对什么的函数,是对float类型的吗?

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧