关于不定长度数组输入那些事

关于不定长度数组输入的那些事

最近不定长度数组输入这个问题困扰了很久,在经过长时间查阅资料之后,发现了几种比较可行的办法,在此总结归纳以供后续查阅

  • 第一种方式借用了一下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()函数释放内存。

迄今为止发现的比较好用的方法就这些了,来源比较杂就不一 一列举了,以上仅供参考。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值