使用回车反向打印字符串

时间:2017-11-23 12:14:53

标签: c carriage-return

我想使用回车来反转我的名字,因为它将光标的控制传递回行的开头,所以如果我使用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");   
}

2 个答案:

答案 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]#