从csdn学到的c的基础之外的知识
2013-01-01 21:19
246 查看
本文主要是通过读一些比较好的博文,通过总结摘抄下来的一些比较有帮助的知识。
当然scanf既然是一个函数那么就会有返回值,通过man scanf 查看
可以发现scanf的返回值为被成功复制的个数,例如
这样可以只有当把所有你想要输入的数据都输入是才可以执行循环体。
如果调用scanf函数进行输入,但是输入了不正确格式的数据,再次循环输入,怎么不能输入了,且一直打印错误输入?
这个原因就在于输入缓冲区了。(将在下一篇介绍),提到了输出缓冲区,scanf同样也有一个输入缓冲区。
调用scanf, scanf就会从它的输入缓冲区中来获取对应的数据,如果获取到就会传入再继续执行,否则就会等待输入。
当输入了字符d并回车后,scanf会将d和整形匹配,结果发现是不匹配的,所以会缓冲区中的内容,接着再次进入循环,
但是之前的输入缓冲区中依然保留着字符d呢,所以又会继续打印错误信息,依次循环永不停止。
处理方法 如果发现输入数据错误,那么清空输入缓冲区即可。使用rewind(stdin);即可,
也可以用fflush(stdin)关于rewind与fflush 的区别点击
更好的方式
参考博文cc_team
#include <stdio.h> int main() { int i; int ret; scanf("%d",&i); return 0; }这里的scanf中为什么是i的地址的原因是scanf本身是一个函数,也就是调用函数,如果你只传给他一个i的值他是不可能改变i本身的值的,只有传给他的是地址,才能改变。也就相当于用指针传递。//思考关于指针传递值的相关知识。
当然scanf既然是一个函数那么就会有返回值,通过man scanf 查看
可以发现scanf的返回值为被成功复制的个数,例如
p=scanf(“%d%d”,&i,&g); printf("%d",p);可以查看被成功复制的个数,这样有时可以用在while中
#include <stdio.h> int main() { int i; int ret; while(scanf("%d%d",&i,&ret)==2) { printf("%d\n%d",i,ret); } return 0; }
这样可以只有当把所有你想要输入的数据都输入是才可以执行循环体。
如果调用scanf函数进行输入,但是输入了不正确格式的数据,再次循环输入,怎么不能输入了,且一直打印错误输入?
#include <stdio.h> int main() { int i; while(1) { scanf("%d",&i); printf("%d\n",i); } return 0; }如果输入正常输入就会正常输出,可是如果输入13 然后再输入 d 就会一直输出13,。原因:
这个原因就在于输入缓冲区了。(将在下一篇介绍),提到了输出缓冲区,scanf同样也有一个输入缓冲区。
调用scanf, scanf就会从它的输入缓冲区中来获取对应的数据,如果获取到就会传入再继续执行,否则就会等待输入。
当输入了字符d并回车后,scanf会将d和整形匹配,结果发现是不匹配的,所以会缓冲区中的内容,接着再次进入循环,
但是之前的输入缓冲区中依然保留着字符d呢,所以又会继续打印错误信息,依次循环永不停止。
处理方法 如果发现输入数据错误,那么清空输入缓冲区即可。使用rewind(stdin);即可,
#include <stdio.h> int main() { int i; int n; while(1) { n=scanf("%d",&i); printf("%d\n",i); if(n!=1) rewind(stdin); } return 0; }
也可以用fflush(stdin)关于rewind与fflush 的区别点击
更好的方式
int ch; while((ch = getchar()) != EOF && ch != '\n');这算是在写的第一篇文章吧,感觉收获确实挺大的,没按照传统的开个博客先写一些自己的话,相当于序言,我就不写了,因为每次开始写东西的时候都不能坚持下来。希望这次能够坚持下来,因为感觉这样写正的很有用。
参考博文cc_team
相关文章推荐
- 环境搭建基础知识1(CSDN博客频道推出文章目录功能)
- 深度学习FPGA实现基础知识12(CSDN网友--深度学习总结)
- VFW基础知识(一些定义性质的。从CSDN中得到的。)
- 【CSDN浅墨】读书笔记1<Direct3D基础知识以及Direct3D初始化步骤>
- 深度学习FPGA实现基础知识6(Deep Learning(深度学习)学习资料大全及CSDN大牛博客推荐)
- 我学到的一些超级基础的andriod知识
- 深度学习FPGA实现基础知识6(Deep Learning(深度学习)学习资料大全及CSDN大牛博客推荐)
- 在CSDN学到很多深圳网络营销和dede的知识
- NoSQL数据库的基础知识 转载http://blog.csdn.net/xyz_lmn/article/details/8052348
- YY指针堆栈,测试你的基础知识。(csdn)
- Yii框架官方教程增补篇6——基础知识:应用、组件、配置、生命周期
- JS基础知识梳理--setTimeout()&setInterval()
- SQL基础知识(二)
- javaWeb基础知识----Cookie,Session
- 系统性能基础知识
- Python基础知识之json&pickle
- java基础知识-----运算符表达式和分支结构
- JAVA相关基础知识 (转载)
- Windows编程基础知识点
- java基础知识回顾之---java StringBuffer类