前言
我们平时在用C语言进行编程的时候,经常遇到需要在控制台中进行字符及字符串的输出,特别是在初学阶段,非常普遍。在普通的输出中,我们一般用printf函数进行输出,每次输出完一行,再输入其他的内容的时候总是换行进行输出,原来的那一行还是存在的。有时候上一行的输出我们可能已经不需要它了, 这时候它再显示在控制台里就会显得很不干净,很不美观。而本文将介绍将控制台变得干净、美观的方法。
用转义字符 '/r '实现特定行覆盖刷新或清除
'\r '是C语言提供的一种将当前位置移到本行开头的转义字符,它的字符值为回车。在使用它的时候我们需要用printf函数对它进行输出。
下面是具体做法
1、在控制台输出一行信息:printf(“这时第1次输出…”);
2、用转义字符清除刚输出的信息:printf("\r");
3、输出下一信息:printf(“这时第2次数出… ”);
注:第一步执行完需要间隔一点时间在执行第二步,否则会因为刷新太快而看不到之前的输出。
示例代码
#include<stdio.h>
#include<windows.h>
int main()
{
int i;
for(i=1;i<5;i++)
{
printf("这是第 %d 次输出...",i);
Sleep(1000); //延时1000ms
printf("\r");
}
return 0;
}
说明
它其实并不能直接将某一行的信息清除,而是将光标的位置移动到本行的开头,这样的话,控制台新输出的信息就会将之前的覆盖掉,从而达到在同一行刷新输出的功能。但是有一点必须注意,当新输出的信息长度小于之前的信息时,那么之前的信息就不会被完全覆盖(就说会留下一个小尾巴),这时可以用输出空字符的方法将其覆盖掉
有人觉得覆盖刷新一行还不够酷,说只想刷新这一行的最后一个字符,问有没有办法。
答案是肯定的!
'\b '退格字符的功能及使用方法
'\b '和 上面所说的 '\r '一样,都是C语言提供的转移字符。不同于 '\r '的是, '\b '的功能是将当前位置后退一个字符,它的字符值为退格。使用的时候同样需要用printf函数进行输出。
使用方法及误区
1、对单个字符进行退格操作
printf("abc\bv"); //此处的输出结果是abv,后面的'v'就是用来替换'c'的字符
printf("abc\b"); //此处的输出结果是abc,可以看出虽然用了'\b'退格,但是并没有提供相应的用来替换最后一个字符'c'的字符
printf("abc\b "); //此处的输出结果是ab,因为在'\b'后面,跟了一个空格' '来替换了字符'c'
2、对多个字符进行退格操作
printf("phrase\b\b\b\b.new"); //此处的输出结果是ph.new,后面的字符串".new"是用来替换"rase"的
printf("phrase\b\b\b\b newString"); //此处输出的结果是ph newString,中间用了两个空格来代替字符串"ra",紧接着用了两个字符"ne"来代替字符串"se",再后面多出的"wString"字符串,则原样输出
总结
转义字符 '\r '和 '\b '的作用都是实现光标的移动,从而改变控制台的输出位置。 虽然它们并不能直接清除某一行或一个信息,但是我们可以通过空字符对之前信息的覆盖,进而在视觉上达到清除信息的效果。除了清除信息,它们还可以实现覆盖刷新等其他功能。