在下面的c语言中,退格\b和换行\n同时使用时,为什么退格就无效了啊,不用换行时,退格有效。
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");
} 展开
退格不代表删除;
#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吧
这个问题提出的时间非常久了,原提问者估计都不再看这里的回答了。但我作为初学者也刚刚遇到这样的疑惑,经@霜之咏叹调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后输出一个新字符,若不需要显示任何字符就用空格代替,即用空格替换原字符。