这是一个LINUX下的C代码,控制光标位置的,输出流顺序有关问题

这是一个LINUX下的C代码,控制光标位置的,输出流顺序问题
代码如下:
C/C++ code
#include<stdio.h>
#include<stdlib.h>
void moveyx(int y,int x)
{
int i=0;
char str[40]={0};
sprintf(str,"\033[%d;%dH",y,x);
fflush(stdout);
printf("%sAAAAAAAA\n",str);
fflush(stdout);
printf("这里分割");
fflush(stdout);
printf("%sBBBBBB\n",str);
fflush(stdout);
}
void main()
{
moveyx(2,4);
getchar();
}

问题是:第一,换行符没有输出来。第二,BBBBB为什么会在AAAA之前输出。第三,每次都fflush是否有必要?有没有会有什么区别?

------解决方案--------------------
问题是:第一,换行符没有输出来。第二,BBBBB为什么会在AAAA之前输出。第三,每次都fflush是否有必要?有没有会有什么区别?

问题(1):\n应该是输出了的。除非你对终端环境作了特殊设置。
问题(2): moveyx(2,4)-->\033[%d;%dH,这个指令指示终端定位到第2行第4列输出
但你的光标当前位置并没有发生改变。因此,BBB...会在光标当前位置输出,当该位置在2,4之前时,就会造成你所看到的情况。
问题(3) 缺省情形下,换行符\n会刷新输出,除非是你修改了终端属性。

想详细了解你系统的终端信息,试试man terminfo。
------解决方案--------------------
1换行符出来了。
2你的两次输出都在同一个位置,B在前是肯定的了。(那个%s所代表的\033[%d;%dH)
3不必,因为默认行缓冲,如果在printf的输出里遇到'\n'就会刷新输出。