在下面的c语言中,退格\b和换行\n同时使用时,为什么退格就无效了啊,不用换行时,退格有效。

#include"stdio.h"
main()
{
int i,t,x,a[10];
for(i=0;i<10;i++)
{printf("请输入第%d个数\n",i+1);
scanf("%d",&a[i]);}
do
{
t=0;
for(i=0;i<9;i++)
{if(a[i]<a[i+1]) {x=a[i];a[i]=a[i+1];a[i+1]=x;t++;}}
}while(t!=0);
for(i=0;i<10;i++)
printf("%d>",a[i]);
printf("\b");
printf("\n");
}

不用换行时,退格有效。这是因为你退格之后,press any key to continue把>覆盖了,所以你看起来是删除了最后一个>
退格不代表删除;
#include"stdio.h"
main()
{
int i,t,x,a[10];
for(i=0;i<10;i++)
{printf("请输入第%d个数\n",i+1);
scanf("%d",&a[i]);}
do
{
t=0;
for(i=0;i<9;i++)
{
if(a[i]<a[i+1])
{
x=a[i];
a[i]=a[i+1];
a[i+1]=x;
t++;
}
}
}
while(t!=0);
for(i=0;i<10;i++)
printf("%d>",a[i]);
printf("\b ");
printf("\n");
}
printf("\b ");在\b后面加个空格吧,空格把>覆盖,相当于把最后一个>删除了;
另外,你的程序不严谨,要是你输入的数中有相同大小的,你也用>连接?追问

谢谢指教,关于覆盖的我不怎么懂,你能解释下嘛,为什么用两次退格和空格就能覆盖两个,不用换行时退格又是有效的?把后面语句改成这样就好了

printf("%d>=",a[i]);
printf("\b\b ");
printf("\n");
}

追答

这里聊不方便,加qq吧

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-01-04

这个问题提出的时间非常久了,原提问者估计都不再看这里的回答了。但我作为初学者也刚刚遇到这样的疑惑,经@霜之咏叹调99 回答的提点,自己总结出来原因如下:

    @霜之咏叹调99说:退格不代表删除,确实是这样。\b是让光标退回一格,不是删除前一个字符,事实上前一个字符仍然存在的。我们在程序最后一行执行\b为什么能删除一个字符呢?是因为程序执行结束后,显示界面会输出”press any key to continue“,这行字就会覆盖光标后面的字符,造成了\b删除上一个字符的假象,实际上是”光标倒一格,再输出新字符覆盖原字符“的过程。如果在语句“printf("\b");”后加"while(1);"让程序死循环,界面不出现“press any key to continue”就可以直观的看到最后一个字符存在,光标是在最后一个字符前面。

    若是\b\n这样,执行结果是光标先倒回一格,然后回车换行。那么前一行的最后一个字符还是存在的,想用\b删除最后一个字符不成功。

    若要用\b删除字符且换行(或后面不再输出任何内容,包括“press any key to continue”),必须得在\b后输出一个新字符,若不需要显示任何字符就用空格代替,即用空格替换原字符。

第2个回答  2011-08-14
确实无效了。具体理由我也不懂。把退格输出放入for循环里可知,最后一次(即输出换行前的一个退格语句是无效的)。我估计是转义字符的间的规定吧。
第3个回答  2011-08-16
楼下正解!!

在下面的c语言中,退格\\b和换行\\n同时使用时,为什么退格就无效了啊,不...
不用换行时,退格有效。这是因为你退格之后,press any key to continue把>覆盖了,所以你看起来是删除了最后一个> 退格不代表删除;include"stdio.h"main(){ int i,t,x,a[10];for(i=0;i<10;i++){printf("请输入第%d个数\\n",i+1);scanf("%d",&a[i]);} do { t=0;for(i=0...

C语言\\b难道不能和\\n连用?
不是不能连用,可以连用 “\\b”的意义是退格,这个退格不是说向左删除一个字符,只是将光标左移一个字符的位置。这时候如果再输出一个字符,则会替换原有字符并将光标右移一个字符。如果没有再输出字符,则原有的字符不会改变。这就是为什么你多输出一个空格,那个“c”就没有了的原因。希望能帮...

C语言~printf("\\b \\n"); 什么效果?
printf("\\b \\n"); 中'\\b'是退格符,光标退一格。'\\n'是换行符,光标移至下一行

c语言\\b\\n的问题,求帮助
解释:遇到\\b的时候光标确实退了一格,但是只是退,不删东西。退完以后就换行了,原来在的东西现在也还在 我给出的代码就是,退格,然后输出一个空格把原来的覆盖掉,然后退格,这样就真的是删掉了,然后换行

C语言输出格式“\\b"什么意思
\\b是退格符,按键盘上的Backspace键就是,它也是一个字符,显示的时候是将光标退回前一个字符,但不会删除光标位置的字符,但如果后边有新的字符,将覆盖退回的那个字符

C语言关于\\b的问题
换行后,本输出语句输出的是1234 printf("1\\b234\\n"); \/\/ 先显示1,\\b后,光标停在1的下面,从光标处开始显示234,所以1被覆盖,换新行,本行的输出是234 printf("\\b1234\\n"); \/\/ 光标停在新行的第一个字符位置,再多的\\b也不会把光标推回的上一行,故本行输出1234 ...

C语言的换行符是什么?
"\\n":C语言中的换行符是"\\n",就是输入完一行内容后,光标转到下一行的起始位置 。不加“\\n”对输出的字符,字符串,数字等没有影响,但是输出矩阵的时候要加“\\n”。例如:printf("first line\\n");printf("second line\\n");换行符(line break)是指一种计算机语言表达方式,它的作用是让...

C语言中的转义字符
- \\b 退格,向左移动一个字符的位置。- \\f 进纸符,用于打印机操作。- \\n 换行,用于在输出中创建新的行。- \\r 回车,类似于换行,但在某些环境中可能不同。- \\t 水平制表符,相当于四个空格。- \\v 垂直制表符,用于调整行距。- \\ddd 和 \\xdd 分别表示1-3个八进制数和2个十六进制数...

为什么C语言语句末尾也要用换行符号\\n,末尾的换行符去掉的话显示出来也...
\\n表示换行的意思。。更多的转义字符如下 \/\/\/ \\a 响铃(BEL) 007 \\b 退格(BS) 008 \\f 换页(FF) 012 \\n 换行(LF) 010 \\r 回车(CR) 013 \\t 水平制表(HT) 009 \\v 垂直制表(VT) 011 \\\\ 反斜杠 092 \\? 问号字符 063 \\' 单引号字符 039 \\" 双引号字符 034 \\0 空字符(NULL) 0...

c语言\\b\\n的问题,求帮助
printf("%d %d",a,b);这种形式

相似回答