当前位置:C++技术网 > 资讯 > 无法正常输出(C4droid)

无法正常输出(C4droid)

更新时间:2016-08-05 09:55:42浏览次数:1+次


/*正常显示
#include<stdio.h>
#include<conio.h>
int main()
{
int i = 0;
while (1)
{
printf("%d\n", i);
sleep(1);
i++;
}
}*/

/*正常显示
#include<stdio.h>
#include<conio.h>
int main()
{
int i = 0;
while (1)
{
printf("%d", i);
fflush(stdout);
sleep(1);
i++;
}
}*/

/*无显示*/
#include<stdio.h>
#include<conio.h>
int main()
{
int i = 0;
while (1)
{
printf("%d", i);
sleep(1);
i++;

}

}


C++技术网解答:

这一共是三组代码,三组的差别都在于:

printf("%d", i); //有没有换行符
fflush(stdout);//有没有此函数
第一组:printf换行符\n,没有fflush函数,可以正常输出。

第二组:printf没有换行符\n,fflush函数,可以正常输出。

第三组:printf没有换行符\n,没有fflush函数,可以正常输出。

三组的结果,可以明显看到,换行符\nfflush函数两者只要有一个就可以正常输出。如果都不存在,则不能正常输出。

由此可以现象可以分析出结果:

    C4droid编译器对于标准输出的处理时,遇到换行符或者强制刷新缓存(fflush函数),会迫使缓存内容被显示出来。默认情况下,遇到换行符就会将一行输出显示,如果没有换行符,则处于缓冲状态,不能立即显示出来。况且此程序一直都是在printf,所以一直在增加缓冲的内容,所以不能实时显示出来。如果内容装满缓存,应该可以显示一次,显示缓冲的所有内容,如果没有装满,也没有换行符,则一直要等到装满才显示。除非人为强制使用fflush函数来刷新缓存迫使显示缓冲内容。

    下面是使用VS的PC编程环境的代码:

/*无显示*/
#include<stdio.h>
//#include<conio.h>
#include <Windows.h>//使用pc的环境
int main()
{
	 int i = 0;
	 while (1)
	 {
		 printf("%d", i);
		 Sleep(1000);
		 //sleep(1);
		 i++;
	 }
}
     还是同样的代码,没有换行符,没有fflush函数,然后执行结果如下:

没有换行符,没有fflush函数

    这是因为VS的编译器是PC上运行的,可以实时的显示,性能是完全没有问题的,手机端的C4droid可能是考虑到手机性能不够,所以,尽可能批量显示。不同的编译器的策略不一样,所以要注意这个问题。