printf不会打印完整的字符串

时间:2013-08-28 09:00:02

标签: printing

它始终显示“hello world”。为什么呢?

#include <stdio.h>

int main(void)
{
    printf("..... world\rhello\n");
    return 0;
}

5 个答案:

答案 0 :(得分:10)

这是因为\rcarriage return(CR)。它将插入符号返回到行的开头。然后你在那里写hello,有效地覆盖了点。

另一方面

\n(换行,LF)用于将插入符号向下移动一行,这就是电传打字机具有CR-LF序列或回车符号的原因通过换行将插入符号放在下一行的开头。 Unix取消了这个,LF现在自己做了。然而,CR仍然存在其旧的语义。

答案 1 :(得分:4)

使用\r,您将返回当前行的开头并覆盖“.....”点:

printf("..... world\rhello\n");
        ^^^^^        vvvvv
        hello <----- hello

工作原理:

..... world
           ^

然后返回当前行的开头:

..... world
^

然后在\r之后打印一个单词。结果是:

hello world
           ^

答案 2 :(得分:2)

因为单独的\rcarriage return)字符导致您的终端返回到行的开头,而不更改行。因此,\r左侧的字符会被"hello"覆盖。

答案 3 :(得分:0)

再次检查,它会发出像

..... world
hello

以及你在printf()内写的内容,它会将其作为输出

返回

答案 4 :(得分:0)

#include<stdio.h>
#include<conio.h>
int main(void) 

{   
    // You will hear Audible tone 3 times.
    printf("The Audible Bell --->           \a\a\a\n");
    // \b (backspace) Moves the active position to the 
    // previous position on the current line. 
    printf("The Backspace --->              ___ \b\b\b\b\b\b\b\b\b\bTesting\n");
    //\n (new line) Moves the active position to the initial 
    // position of the next line.
    printf("The newline ---> \n\n");
    //\r (carriage return) Moves the active position to the 
    // initial position of the current line.
    printf("The carriage return --->        \rTesting\rThis program is for testing\n");
    // Moves the current position to a tab space position
    printf("The horizontal tab --->         \tTesting\t\n");

    getch();
    return 0;
}

/***************************OUTPUT************************
The Audible Bell --->
The Backspace --->                        Testing__
The newline --->

This program is for testing
The horizontal tab --->                         Testing
***************************OUTPUT************************/