我想使用回车来反转我的名字,因为它将光标的控制传递回行的开头,所以如果我使用A\ra\rs\rh\ri\rs\rh
,首先A会打印,我认为接下来要做的就是在A
之前a
之前和s
之前打印,依此类推,直到该字母变为hsihsaA
(来自Aashish
)作为预期输出,但随着它的变化out,它只是创建hA
作为输出,为什么呢?
#include <stdio.h>
int main(void)
{
printf(" A\ra\rs\rh\ri\rs\rh\n");
}
答案 0 :(得分:4)
这与C无关(除了在C中,您只有一个表示标准输出的流,按顺序记录字符)。
这取决于接收输出的(虚拟)终端作为响应控制字符的输入。如果hA
的结果只是在当前行的开头再次开始,那么仅\r
的输出将是合理的。这是,如果您的终端覆盖已经存在的角色。 您的终端似乎在做一些与众不同的事情,但无论如何,它都不受您程序的控制。编辑后,您的终端显然正是如此。这是最有可能的输出,但我不会指望每个终端都以这种方式表现。
如果您想控制终端,我建议您使用curses
库的实现 - 请在NCURSES Programming HOWTO中阅读更多内容。对终端的控制不是语言C的一部分,但curses
是事实上的标准,适用于许多系统。
答案 1 :(得分:2)
嗯,首先,我得到一个输出h
,这就是我期望的
将光标移动到行首并开始打印后,前一个输出将被覆盖。因此,只剩下最后一个输出。由于通常标准输出是行缓冲的,因此,最后\n
导致缓冲区最终被刷新,可见输出为h
。
中间变化,不会可见,因此我不希望您能够反向打印,正如您所期望的那样。
我的系统信息:
[broadsword@ph-ds-yyafe-3 temp]# gcc test1.c
[broadsword@ph-ds-yyafe-3 temp]# ./a.out
h
[broadsword@ph-ds-yyafe-3 temp]# gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-17)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[broadsword@ph-ds-yyafe-3 temp]#