关于不定长度数组输入的那些事
最近不定长度数组输入这个问题困扰了很久,在经过长时间查阅资料之后,发现了几种比较可行的办法,在此总结归纳以供后续查阅
- 第一种方式借用了一下scanf函数的返回值
int a[100];
while(scanf("%d",&a[i])){
//(scanf("%d",&a[i])!=EOF)等价
//一些输入数字之后要做的事
i++;
}
这种方式有一点点弊端,没法直接回车结束输入,多用于边处理边输入的情况。
- 第二种方式是用ungetc()函数将数字送回输入流
int a[10];
char c;
int i=0,n=0;
while((c=getchar())!='\n'){
ungetc(c,stdin);
scanf("%d",&a[n++]);
//len++;
//这里的len意在计算输入的长度,不要也罢
}
这种方式也可使用非空格的字符作为分隔符。此外需要注意的是,这种输入方式如果在数字后面加空格再加回车是无法结束输入的。
- 第三种直接用getchar,简单粗暴
int a[1024];
int n=0,i=0;
do{
scanf("%d",&a[i++]);
}while(getchar()!='\n');
这种方式其实和第二种有些类似,都是通过判断输入的是否是回车键来结束输入。
- 第四种是用了realloc函数修改长度的特点
int i,num;
int count=0;
int *ptr=NULL;//这里一定要初始化为 NULL!
do{
scanf("%d",&num);
count++;
ptr=(int *)realloc(ptr,count *sizeof(int));
if(ptr==NULL){
exit(1);
}//这里是为了防止内存分配失败
ptr[count-1]=num;
}while(num!=-1);
注意这个方法使用完毕要用free()函数释放内存。
迄今为止发现的比较好用的方法就这些了,来源比较杂就不一 一列举了,以上仅供参考。