动态内存分配
读入一列整数,存储在动态分配数组中,观察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; //跳出循环;}