首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

延缓输出,该怎么解决

2012-06-14 
延缓输出下面的代码是为了实现每隔一秒钟输出一个数字,但是发现结果是等到最后一秒才输出所有要输出的数字

延缓输出
下面的代码是为了实现每隔一秒钟输出一个数字,
但是发现结果是等到最后一秒才输出所有要输出的数字;


C/C++ code
#include<stdio.h>#include<time.h>void wait ( int seconds ){      clock_t endwait;      endwait = clock () + seconds * CLOCKS_PER_SEC ;      while (clock() < endwait) {}}      int main(){      int i;      for(i = 1; i< 10; i++)      {           printf(" %d ",i); //如果代码写成printf("%d\n", i);就可以每隔一秒输出一个数字,求其中的真理?           wait(1);      }       return 0;  }


[解决办法]
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。

[解决办法]
怎么在我电脑上就正常咧?
--------------------------------------
fflush用于清空缓冲流,虽然一般感觉不到,但是默认printf是缓冲输出的。
fflush(stdout),使stdout清空,就会立刻输出所有在缓冲区的内容。
fflush(stdout)这个例子可能不太明显,但对stdin很明显。
如下语句:
int a,c;
scanf("%d",&a);
getchar();
输入:
12(回车)
那么 a=12 ,c= '\n' 
而:
int a,c;
scanf("%d",&a);
fflush(stdin);
getchar();
输入:
12(回车)
那么a=12, c暂时未得到输入值,还需要再输入c,因为getchar也是缓冲输入,'\n'本还在缓冲区,但是被清空了。
另外fflush不能作用于重定向输入流。


[解决办法]
代码从理论上来说是正确的,之所以出现那种情况,可能和你的机器有关(比如CPU的性能不够)。

C/C++ code
#include <stdio.h>#include <Windows.h>//#include<time.h>//void wait ( int seconds )  // 这种延时方式,相当消耗CPU资源,实际中可不要这么做。//{//      clock_t endwait;//      endwait = clock () + seconds * CLOCKS_PER_SEC ;//      while (clock() < endwait) {}//}      int main(){      int i;      for(i = 1; i< 10; i++)      {           printf(" %d ",i); //如果代码写成printf("%d\n", i);就可以每隔一秒输出一个数字,求其中的真理?           //wait(1);           Sleep(1000);  // 如果是在Windows上,就用这个函数吧,Linux上也有类似的函数      }       return 0;  }
[解决办法]
探讨

引用:

代码从理论上来说是正确的,之所以出现那种情况,可能和你的机器有关(比如CPU的性能不够)。

C/C++ code

#include <stdio.h>
#include <Windows.h>
//#include<time.h>

//void wait ( int seconds ) // 这种延时方式,相当消耗CPU资源,实际中可不要这……

热点排行