c语言输入一行未知个数数字存入数组

一直有个疑问输入一行数字存入数组时若不知道数字的个数怎么办,最容易想到的办法就是接收字符而后转化为数字,但这样太过麻烦。git

今天上网查了下,说能够用ungetc()函数将字符送回输入流,在这里总结概括一下数组

此外还意外的解决了另一些之前遇到的问题,也是在调试代码时发现的,用此段代码能够用除了空格之外的字符做为分隔符,并且分隔符的长度也能够很长:如输入12qwertyuiop34asdfghjkl123,23zxc45  最后获得的数组为:a[0]=12,a[1]=34,a[2]=123,a[3]=23,a[4]=45函数

先贴上代码:ui

 1 #include<stdio.h>
 2 #include<ctype.h>
 3 int main()
 4 {
 5     int a[1000];
 6     char c;
 7     int i=0;
 8     int n=0;
 9     while((c=getchar())!='\n')
10     {
11         if(isdigit(c))
12         {
13             ungetc(c,stdin);//将c送回输入流
14             scanf("%d",&a[n++]);
15         }
16     }
17     for(i=0;i<n;i++)
18     {
19         printf("%d ",a[i]);
20     }
21     return 0;
22 }

这里要说明一下,在使用空格做为分隔的时候把14行的scanf函数放到if语句外面能够减小循环次数spa

可是用其余符号做为分隔符的时候只能放在if语句中,否则会出错调试

这里又有另外一个问题了,一开始怎么知道数组的长度,定义多少合适呢?code

 

  1. 若是预先能够估计数组的大小,那么能够比估计的数值定义的稍大一些便可
  2. 若是没法预知,个人解决办法就是使用链表,可是这样就没法使用数组的一些特性,好比可能会花不少的时间去寻找某一下标的数据
  3. 另外我想到的就是牺牲存储空间的办法,先用链表将数据存起来,并记录个数。若是后面须要屡次利用下标访问数据的话,可动态分配一块内存来存储数据,并将原来的链表释放,或根据须要保留
  4. 除此以外也没想到有什么好的方法。。。
相关文章
相关标签/搜索