这是一个LINUX下的C代码,控制光标位置的,输出流顺序有关问题
这是一个LINUX下的C代码,控制光标位置的,输出流顺序问题
代码如下:
问题是:第一,换行符没有输出来。第二,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'就会刷新输出。
代码如下:
- 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'就会刷新输出。