我希望输出到命令行(到目前为止,在XCode中的gdb命令行中)覆盖同一行。我现在用来打印输出的代码从Objective-C方法中获取了一些东西,并最终做到了这一点:
unsigned char _output = ...;
printf("Output:%c\r",_output);
fflush(stdout);
它打印正确的输出,但是在连续的行上而不是覆盖。问题是什么?
答案 0 :(得分:3)
Xcode中的GDB控制台不是功能齐全的终端仿真。它旨在支持与GDB的交互,就是这样。如何处理控制字符取决于您使用的终端仿真器。使用Terminal.app直接从命令行运行该工具会发生什么? xTerm怎么样?的rxvt?
答案 1 :(得分:1)
'\ r'和'\ n'的解释取决于平台或终端。终端可以设置为自动将换行符(0x0a)附加到'\ n'。此外,'\ n',是换行符,它可以表示单个换行符(假设回车符)或回车符和换行符对。为了便于携带,人们不能指望'\ r'只将托架(光标)返回到当前行的开头。
要到达同一行的开头,可能会想要使用'\ b'(退格键)。但这也是主观的。有些输出设备将命令解释为破坏性的,有些则将一个字符向后移动,非破坏性的,其他设备则忽略它。
我建议您使用光标定位库。有人推荐NCurses
。