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

今天上网查了下,说可以用ungetc()函数将字符送回输入流,在这里总结归纳一下

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

先贴上代码:

 #include<stdio.h>
#include<ctype.h>
int main()
{
int a[];
char c;
int i=;
int n=;
while((c=getchar())!='\n')
{
if(isdigit(c))
{
ungetc(c,stdin);//将c送回输入流
scanf("%d",&a[n++]);
}
}
for(i=;i<n;i++)
{
printf("%d ",a[i]);
}
return ;
}

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

但是用其他符号作为分隔符的时候只能放在if语句中,不然会出错

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

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

最新文章

  1. html5标签canvas函数drawImage使用方法
  2. 40GbE网络之后
  3. Input输入框输入银行卡号自动空格
  4. .proto 文件转js 文件方法【nodejs】
  5. 如何在HTML中加载Flash(2种实现方法)_HTML/Xhtml_网页制作
  6. javascript 不响应可能是引用外部javascript时,引用顺序不对。
  7. OC NSFileManager(文件路径操作)
  8. 关于 VS2012 创建 MVC4 Empty 项目的一个小问题
  9. careercup-递归和动态规划 9.3
  10. 201521123063 《Java程序设计》 第7周学习总结
  11. WPF DataGrid Custommization using Style and Template
  12. [QNAP crontab 定時執行程式
  13. 关于web页面JApplet打印小票
  14. 操作XML
  15. burnside+polya 整理
  16. MyEclipse 8.6 下载
  17. Fstring
  18. 常用类枚举和DATE的介绍
  19. 遇到电脑IP地址冲突了怎么解决
  20. solus 系统 - 自定义终端快捷键

热门文章

  1. -_-#【Canvas】转成黑白
  2. 编写SQL
  3. Scala 编程(三)基本类型和操作
  4. 机器学习十大算法 之 kNN(一)
  5. E - Minimum Cost - POJ 2516(最小费)
  6. unity3D基础学习 通过判断鼠标点击的是否是目标物体,物体旋转,滑动滚轮缩放拉近视角
  7. ScrollView与ListView合用(正确计算Listview的高度)的问题解决
  8. Apache Shiro 使用手冊 链接文件夹整理
  9. DELL R720服务器安装Windows Server 2008 R2 操作系统图文详解
  10. AMD 规范以及如何将AMD转变为CommonJS