首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

动态内存分配解决思路

2012-09-08 
动态内存分配读入一列整数,存储在动态分配数组中,观察EOF判断是否结束,数组第一个数存放其包含的个数。[cod

动态内存分配
读入一列整数,存储在动态分配数组中,观察EOF判断是否结束,数组第一个数存放其包含的个数。[code=C/C++][/code]#include<stdlib.h>
#include<stdio.h>

main()
{
int *p;
int i;
int j; 
p = calloc(100,sizeof(int));//申请100个内存空间;
for(i=1;i<100;i++)
{
scanf("%d",&p[i]);//得到输入,并存储在得到的内存空间;
if(p[i]!=EOF)//如果不是结束符,则继续存储得到的数;
{
continue;
}
if(p[i]==EOF)//如果输入结束,执行输出,并将第一个单元存放存储的数字的总个数;
{
p[0] = --i;
j = i;
for(i = 0;i<j;i++)
printf("%3d",p[i]);
}
break;//跳出循环;

}
printf("\n");
free(p);

}
但是执行的时候,他不执行if(p[i]==EOF)中的语句。

[解决办法]

C/C++ code
for (i=1;i<100;i++) {    if (1!=scanf("%d",&p[i])) break;}j=i;p[0]=j;for (i=0;i<j;i++) printf("p[%d]==%3d\n",i,p[i]);
[解决办法]
用scanf是不能正确接收EOF存入整形或者字符中的。所以需要if(scanf("%d",&p[i])!=EOF)这样写。
C/C++ code
for(i=1;i<100;i++){if(scanf("%d",&p[i])!=EOF) //如果不是结束符,则继续存储得到的数;{continue; }else //如果输入结束,执行输出,并将第一个单元存放存储的数字的总个数;{p[0] = --i;j = i;for(i = 0;i<j;i++)printf("%3d",p[i]); }break; //跳出循环;} 

热点排行