嵌入式学习日记(八)
来源:互联网 发布:linux 配置反向dns 编辑:程序博客网 时间:2024/06/06 19:22
2017-07-15
今日是学习嵌入式的第八天。
今天老师给我们布置了八道题目,为了让同学们更熟练的使用前面内容。在这里我就不把代码发出来了,而是来探讨一个编程中所遇到的问题。
请看以下代码
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <time.h>void fun();int main(){ fun(); return 0;}void fun(){ int n,i; srand(time(NULL)); printf("please input n:"); scanf("%d",&n); for(i=0;i<n;i++) { printf("%d ",rand()%32+1); sleep(1); } putchar(10);}
此段代码试图在n秒内输出n个1~32的随机数,要达到每秒一个的效果。可是在我运行的过程中发现,并没有达到理想的效果!而是,在n秒后直接输出了n个随机数!(效果请感兴趣的各位自测)
我想会不会是printf太low了,于是又有了下面的代码(将以上for循环中改写,用fprintf将字符串直接放入stdout中)
for(i=0;i<n;i++) { fprintf(stdout,"%d ",rand()%32+1); sleep(1); }
然而,结果很尴尬。还是那样。
在我很多次尝试后,突然有一次发现实现了间隔一秒的效果!代码如下:
for(i=0;i<n;i++) { sleep(1); fprintf(stdout,"%d\n",rand()%32+1); }
怎么换成换行就输出了呢?让我有一丝想法:可能与缓冲区有关。
经过我的一番考察发现,果然是因为只是将想要输出的东西放在了stdout缓冲区中,并没有真正的输出!解决方法也很简单,只用手动的清空缓冲区就行了。代码如下:
for(i=0;i<n;i++) { sleep(1); fprintf(stdout,"%d\n",rand()%32+1); fflush(stdout); }
fflush(stdout)有清空缓冲区的作用。这样就能完成最初想要的效果了!
幸福总是短暂的,这次的问题解决了获得短暂的成就感,然而,之后的问题又在何处呢?期待挑战!——Fun_Peanut.
阅读全文
2 0
- 嵌入式学习日记(八)
- 嵌入式学习日记(一)
- 嵌入式学习日记(二)
- 嵌入式学习日记(三)
- 嵌入式学习日记(四)
- 嵌入式学习日记(五)
- 嵌入式学习日记(六)
- 嵌入式学习日记(七)
- 嵌入式学习日记(九)
- 嵌入式学习日记(十)
- 嵌入式学习日记(十一)
- 嵌入式学习日记(十二)
- 嵌入式学习日记(十三)
- 嵌入式学习日记(十四)
- 黑马程序员 学习日记(八)
- 黑马程序员 学习日记(八)
- 学习嵌入式日记
- LDD3源码学习日记<八>
- C/C++基础知识:typedef用法小结
- 医药网站(2)HTML代码
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- Topcoder SRM 718 Hard
- POJ 3070 Fibonacci 笔记
- 嵌入式学习日记(八)
- buffer与cache
- Ubuntu 下mysql数据库存放位置迁移
- Android串口蓝牙开发实战
- C++ STL-deque基本原理
- linux学习1
- git的使用,用以记录,以后忘记查看,有想要学习的童鞋也可参考
- ReentrantLock与synchronized
- ? StringWriter