C语言如何清除控制台特定的一行,及'\b'字符的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dark_cy/article/details/88137288

前言

我们平时在用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 '的作用都是实现光标的移动,从而改变控制台的输出位置。 虽然它们并不能直接清除某一行或一个信息,但是我们可以通过空字符对之前信息的覆盖,进而在视觉上达到清除信息的效果。除了清除信息,它们还可以实现覆盖刷新等其他功能。

猜你喜欢

转载自blog.csdn.net/dark_cy/article/details/88137288
今日推荐