嵌入式学习日记(八)

2017-07-15

今日是学习嵌入式的第八天。


今天老师给我们布置了八道题目,为了让同学们更熟练的使用前面内容。在这里我就不把代码发出来了,而是来探讨一个编程中所遇到的问题。


请看以下代码

#include 
#include 
#include 
#include 

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;iprintf("%d   ",rand()%32+1);

    sleep(1);
  }
  putchar(10);
}


  此段代码试图在n秒内输出n个1~32的随机数,要达到每秒一个的效果。可是在我运行的过程中发现,并没有达到理想的效果!而是,在n秒后直接输出了n个随机数!(效果请感兴趣的各位自测)




  我想会不会是printf太low了,于是又有了下面的代码(将以上for循环中改写,用fprintf将字符串直接放入stdout中)

  for(i=0;i"%d  ",rand()%32+1);

    sleep(1);
  }

  然而,结果很尴尬。还是那样。




  在我很多次尝试后,突然有一次发现实现了间隔一秒的效果!代码如下:

  for(i=0;isleep(1);

    fprintf(stdout,"%d\n",rand()%32+1);
  }

  怎么换成换行就输出了呢?让我有一丝想法:可能与缓冲区有关。




  经过我的一番考察发现,果然是因为只是将想要输出的东西放在了stdout缓冲区中,并没有真正的输出!解决方法也很简单,只用手动的清空缓冲区就行了。代码如下:

  for(i=0;isleep(1);

    fprintf(stdout,"%d\n",rand()%32+1);

    fflush(stdout);
  }

  fflush(stdout)有清空缓冲区的作用。这样就能完成最初想要的效果了!




  幸福总是短暂的,这次的问题解决了获得短暂的成就感,然而,之后的问题又在何处呢?期待挑战!——Fun_Peanut.

你可能感兴趣的:(嵌入式学习日记(八))