Linux C 菜鸟问题

陈钰铠 发布于 2013/04/21 22:59
阅读 580
收藏 0
#include<stdio.h>
void main(){

    printf("  ab c\t de\rf\tg\n");

}
f ab c    gde

我弄来弄去都是这结果,究竟哪里不对?
加载中
1
zodiac1111
zodiac1111
echo -e "  ab c\t de\rf\tg\n"
f ab c	gde
<空行>

没什么不对的啊= =

  1. 空格 空格 a b c [光标]
  2. 空格 空格 a b c <水平制表符,占3个空位> 空格 d e [光标]
  3. 回车(return)光标到第一个空格处:
    [光标&空格]空格abc<水平制表符>空格de
  4. f,第一个空格变成"f",光标停在第二个空格处:
    [光标&空格] a b c <水平制表符> 空格 d e
  5. \t => 向后跳至最近的8的整数倍字符.
    f
     空格 a b c <水平制表符> [空格&光标] d e
  6. g:
    f
     空格 a b c <水平制表符> g [d&光标] e
  7. \n,newline:
    f 空格 a b c <水平制表符> g d e
    [光标]

可以这样一步一部查看:

[zodiac1111@Lee-laptop tmp]$  echo -e "  ab c\t de"
  ab c	 de
[zodiac1111@Lee-laptop tmp]$ echo -e "  ab c\t de\r"
  ab c	 de
[zodiac1111@Lee-laptop tmp]$ echo -e "  ab c\t de\rf"
f ab c	 de
[zodiac1111@Lee-laptop tmp]$ echo -e "  ab c\t de\rf\t"
f ab c	 de
[zodiac1111@Lee-laptop tmp]$ echo -e "  ab c\t de\rf\tg"
f ab c	gde
[zodiac1111@Lee-laptop tmp]$ echo -e "  ab c\t de\rf\tg\n"
f ab c	gde

[zodiac1111@Lee-laptop tmp]$


1
txgcwm
txgcwm

c语言转义序列中解释如下:

回车符\r将活动位置移到当前行的开始处;水平制表符\t将活动位置移到下一个水平制表点。

0
卖切糕大叔
卖切糕大叔
\n是换行(移到下一行), \r是回车(回到行的开始),这么设计主要是源于老式带自己换行打印的需要,windows里面换行+回车是 \n\r,linux则是\n,你\r只有回车的作用,所以 \rf\tg就是回到 本行开始然后打印  (f‘制表符’g)了,楼主难道是想换行(\n)却误用了回车(\r)?
0
panlatent
panlatent
第一个\r的原因 回车不等于换行 回车使光标回到行首。还有返回值不要用void 用 int
0
Esnce
Esnce
#include<stdio.h>

int main()
{
    printf("  ab c\t de\rf\tg\n");
    printf("f\tg\n");             
    return 0;
}
0
开源中国首席辣条代理
开源中国首席辣条代理
\rf的意思是回到行首打印一个f,这个代码本来就应该这样输出的.
0
陈钰铠

可结果不应该是"f     gde"吗?abc应该被返回的f      g代替了,其后的“de"未被新字符取代。(谭浩强的C程序设计)我是照着书本做的,在windows下返回的是"f  gde", 为什么到了linux下却变成了" f ab c gde"

原文是这样的:#include<stdio.h>


int main()
{
        printf("  ab c\t de\rf\tg\n");
        printf("h\ti\b\bj   k\n");
}

./x
f ab c gde
h      j   k

正确的输出不是应该是:

f        gde

h      j   k

第二行输出正确,第一行输出与原作者书箱输出结果不符。这是什么原因?

返回顶部
顶部